将点转换为按钮
Converting Point to Button
是否可以在 java 中从点转换为 JButton,就像从 int
转换为 string
一样。任何帮助都是可以接受的,我需要帮助.谢谢!
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.*;
import java.awt.*;
@SuppressWarnings("serial")
public class Beginner extends JPanel {
static JButton quest;
Random rand = new Random();
int n = 10;
static List <Point> points = new ArrayList<Point> ();
public Beginner() {
int radius = 200;
Point center = new Point (250, 250);
double angle = Math.toRadians(360 / n);
points.add(center);
for (int i = 0; i < n; i++) {
double theta = i * angle;
int dx = (int) (radius * Math.sin(theta));
int dy = (int) (radius * Math.cos(theta));
Point p = new Point (center.x + dx , center.y + dy);
points.add(p);
}
draw (points);
}
public void draw (List<Point> points) {
JPanel panels = new JPanel();
SpringLayout spring = new SpringLayout();
int count = 1;
for (Point point: points) {
quest = new JButton("Question " + count);
quest.setForeground(Color.BLACK);
Font fonte = new Font("Script MT Bold", Font.PLAIN, 20);
quest.setFont(fonte);
add (quest);
count++;
spring.putConstraint(SpringLayout.WEST, quest, point.x, SpringLayout.WEST, panels );
spring.putConstraint(SpringLayout.NORTH, quest, point.y, SpringLayout.NORTH, panels );
setLayout(spring);
panels.setOpaque(false);
panels.setVisible(true);
panels.setLocation(5,5);
add(panels);
quest.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent p) {
JButton source = (JButton) p.getSource();
//where the problem lies
if (source.equals(points.get(0))) {
//some action....
}
}
});
}
}
public static void main(String [] args){
JFrame frame = new JFrame();
//set JFrame properties
JButton start = new JButton ("CLick here to start");
start.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent et) {
Beginner novice = new Beginner();
//set Beginner properties (remember it extends JPanel);
}
});
} }
可能您需要像这样将缺失的行添加到您的代码中,我刚刚对其进行了测试并且它有效。
- 从
awt
包中导入 Point
class。
- 使用
main
方法通过创建 class. 的新实例来执行您的代码
您还需要扩展 JFrame
class 才能调用 setLayout
和 add
方法。
package javaapplication6;
import java.awt.Color;
import java.awt.Font;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SpringLayout;
import javax.swing.JFrame;
public class Beginner extends JFrame {
Random rand = new Random();
int n = 10;
static List<Point> points = new ArrayList<Point>();
public Beginner() {
int radius = 200;
Point center = new Point(250, 250);
double angle = Math.toRadians(360 / n);
points.add(center);
for (int i = 0; i < n; i++) {
double theta = i * angle;
int dx = (int) (radius * Math.sin(theta));
int dy = (int) (radius * Math.cos(theta));
Point p = new Point(center.x + dx, center.y + dy);
points.add(p);
}
draw(points);
}
public void draw(List<Point> points) {
JPanel panels = new JPanel();
SpringLayout spring = new SpringLayout();
int count = 1;
for (Point point : points) {
JButton quest = new JButton("Question " + count);
quest.setForeground(Color.BLACK);
Font fonte = new Font("Script MT Bold", Font.PLAIN, 20);
quest.setFont(fonte);
quest.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent et) {
System.out.println(quest.getText());
//do something else
}
});
add(quest);
spring.putConstraint(SpringLayout.WEST, quest, point.x, SpringLayout.WEST, panels);
spring.putConstraint(SpringLayout.NORTH, quest, point.y, SpringLayout.NORTH, panels);
setLayout(spring);
panels.setOpaque(false);
panels.setVisible(true);
panels.setLocation(5, 5);
add(panels);
count++;
}
setSize(700, 700);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Beginner();
}
}
是否可以在 java 中从点转换为 JButton,就像从 int
转换为 string
一样。任何帮助都是可以接受的,我需要帮助.谢谢!
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.*;
import java.awt.*;
@SuppressWarnings("serial")
public class Beginner extends JPanel {
static JButton quest;
Random rand = new Random();
int n = 10;
static List <Point> points = new ArrayList<Point> ();
public Beginner() {
int radius = 200;
Point center = new Point (250, 250);
double angle = Math.toRadians(360 / n);
points.add(center);
for (int i = 0; i < n; i++) {
double theta = i * angle;
int dx = (int) (radius * Math.sin(theta));
int dy = (int) (radius * Math.cos(theta));
Point p = new Point (center.x + dx , center.y + dy);
points.add(p);
}
draw (points);
}
public void draw (List<Point> points) {
JPanel panels = new JPanel();
SpringLayout spring = new SpringLayout();
int count = 1;
for (Point point: points) {
quest = new JButton("Question " + count);
quest.setForeground(Color.BLACK);
Font fonte = new Font("Script MT Bold", Font.PLAIN, 20);
quest.setFont(fonte);
add (quest);
count++;
spring.putConstraint(SpringLayout.WEST, quest, point.x, SpringLayout.WEST, panels );
spring.putConstraint(SpringLayout.NORTH, quest, point.y, SpringLayout.NORTH, panels );
setLayout(spring);
panels.setOpaque(false);
panels.setVisible(true);
panels.setLocation(5,5);
add(panels);
quest.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent p) {
JButton source = (JButton) p.getSource();
//where the problem lies
if (source.equals(points.get(0))) {
//some action....
}
}
});
}
}
public static void main(String [] args){
JFrame frame = new JFrame();
//set JFrame properties
JButton start = new JButton ("CLick here to start");
start.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent et) {
Beginner novice = new Beginner();
//set Beginner properties (remember it extends JPanel);
}
});
} }
可能您需要像这样将缺失的行添加到您的代码中,我刚刚对其进行了测试并且它有效。
- 从
awt
包中导入Point
class。 - 使用
main
方法通过创建 class. 的新实例来执行您的代码
您还需要扩展
JFrame
class 才能调用setLayout
和add
方法。package javaapplication6; import java.awt.Color; import java.awt.Font; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.SpringLayout; import javax.swing.JFrame; public class Beginner extends JFrame { Random rand = new Random(); int n = 10; static List<Point> points = new ArrayList<Point>(); public Beginner() { int radius = 200; Point center = new Point(250, 250); double angle = Math.toRadians(360 / n); points.add(center); for (int i = 0; i < n; i++) { double theta = i * angle; int dx = (int) (radius * Math.sin(theta)); int dy = (int) (radius * Math.cos(theta)); Point p = new Point(center.x + dx, center.y + dy); points.add(p); } draw(points); } public void draw(List<Point> points) { JPanel panels = new JPanel(); SpringLayout spring = new SpringLayout(); int count = 1; for (Point point : points) { JButton quest = new JButton("Question " + count); quest.setForeground(Color.BLACK); Font fonte = new Font("Script MT Bold", Font.PLAIN, 20); quest.setFont(fonte); quest.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent et) { System.out.println(quest.getText()); //do something else } }); add(quest); spring.putConstraint(SpringLayout.WEST, quest, point.x, SpringLayout.WEST, panels); spring.putConstraint(SpringLayout.NORTH, quest, point.y, SpringLayout.NORTH, panels); setLayout(spring); panels.setOpaque(false); panels.setVisible(true); panels.setLocation(5, 5); add(panels); count++; } setSize(700, 700); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { new Beginner(); } }