Java 在GUI中与侦听器交互的对象
我正在制作一个简单的程序来创建和滚动模具。有一个单独的Die类,其中包括一个经过论证的构造函数,该构造函数将Die应该具有的边数作为参数。我遇到的问题是何时创建模具对象。作为一个字段,我觉得太早了,因为我必须在listener方法中指定参数,当它在listener方法中创建时,当再次调用die对象进行滚动时,它不能在外部再次修改Java 在GUI中与侦听器交互的对象,java,swing,user-interface,listener,Java,Swing,User Interface,Listener,我正在制作一个简单的程序来创建和滚动模具。有一个单独的Die类,其中包括一个经过论证的构造函数,该构造函数将Die应该具有的边数作为参数。我遇到的问题是何时创建模具对象。作为一个字段,我觉得太早了,因为我必须在listener方法中指定参数,当它在listener方法中创建时,当再次调用die对象进行滚动时,它不能在外部再次修改 `package question1; import java.awt.event.ActionEvent; import java.awt.ev
`package question1;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
This frame shows a data set and its statistics.
*/
public class DieGUI extends JFrame
{
private static int WINDOW_WIDTH = 450;
private static int WINDOW_HEIGHT = 250;
private JLabel message;
private JTextField Sides;
private JTextArea data;
private JButton create;
private JButton rollButton;
private static JPanel panel;
private int numSides;
//declare data fields here (GUI Components and other data fields)
public DieGUI()
{
message = new JLabel("Enter number of sides");
Sides = new JTextField(5);
create = new JButton("Create");
rollButton = new JButton("Roll Current Die");
data = new JTextArea(10, 30);
panel = new JPanel();
panel.add(message);
panel.add(Sides);
panel.add(create);
panel.add(rollButton);
panel.add(data);
//Initialize data fields and construct GUI
//supporting methods are here.
create.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
numSides = Integer.parseInt(Sides.getText());
data.append("Note that creating a new die replaces the current one");
Die die = new Die(numSides);
data.append("\n" + die.toString());
}
});
rollButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg1){
die.roll();
data.append("\n" + die.getSideUp());
}
});
}
public static void main(String[] args)
{
JFrame frame = new DieGUI();
frame.setTitle("Dice GUI!");
frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.add(panel);
}}`
有多种方法可以解决此问题:
setFaceCount()
到Die
类,以便根据需要从
你的听众无论如何,您需要创建一个die字段,以便可以在侦听器方法的范围之外访问它。如何设计它将取决于您希望在GUI中的行为。您可以在外部创建对象,然后通过set方法设置面数。由于文本字段从一开始就有一个默认值,我建议不要使用
null
,而只使用初始字段值作为初始模具尺寸,例如,专用模具=新模具(5)代码>