Java 在GUI中与侦听器交互的对象

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

我正在制作一个简单的程序来创建和滚动模具。有一个单独的Die类,其中包括一个经过论证的构造函数,该构造函数将Die应该具有的边数作为参数。我遇到的问题是何时创建模具对象。作为一个字段,我觉得太早了,因为我必须在listener方法中指定参数,当它在listener方法中创建时,当再次调用die对象进行滚动时,它不能在外部再次修改

`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
    类,以便根据需要从 你的听众

  • 添加模具字段,但默认设置为null。换模 在你的听众中


  • 无论如何,您需要创建一个die字段,以便可以在侦听器方法的范围之外访问它。如何设计它将取决于您希望在GUI中的行为。

    您可以在外部创建对象,然后通过set方法设置面数。由于文本字段从一开始就有一个默认值,我建议不要使用
    null
    ,而只使用初始字段值作为初始模具尺寸,例如,
    专用模具=新模具(5)