对象与GUI中的侦听器交互

时间:2017-07-07 12:55:12

标签: java swing user-interface listener

我正在创建一个简单的程序来创建和掷骰子。有一个单独的Die类,其中包含一个有争议的构造函数,它将模具应具有的边数作为参数。我遇到的问题是何时创建模具对象。作为一个字段我觉得太快了,因为我必须在监听器方法中指定参数,并且当它在监听器方法中创建时,当再次调用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);
    }}`

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题:

  1. 将die添加为具有默认面数的字段。添加方法, setFaceCount()Die以根据需要更新此内容 你的倾听者。

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

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