带ActionListener的问题

问题描述 投票:0回答:1

我正在尝试编写一个程序,要求您单击按钮以生成随机数,然后让用户尝试猜测该数字是什么。

现在,我正在努力单击按钮以生成随机数,并告诉用户该随机数是通过JTextPane生成的。无论出于何种原因,这部分代码似乎都无法正确执行。

我已经在主类中实例化了该对象,并在按钮上添加了一个动作侦听器。我不知道是什么原因导致它无法正常工作:

package GUIs;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.JToggleButton;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import java.awt.Font;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Principal extends JFrame {
//Elements
private JPanel contentPane;
private JTextField attemptField;
private JTextPane hint;
private JButton btnGenerate;
private JButton btnEnter;

//Events
private GenerateRandomNumber genRanNum;

//Misc variables
int ranNum = 1;
private JTextField textField;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Principal frame = new Principal();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

public Principal() {

    //Generates JPanel
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    //Generates text field where the user will write the number
    attemptField = new JTextField();
    attemptField.setBounds(130, 59, 130, 26);
    contentPane.add(attemptField);
    attemptField.setColumns(10);

    //Generates the hint
    hint = new JTextPane();
    hint.setBackground(SystemColor.window);
    hint.setText("First, generate a new number!");
    hint.setBounds(130, 110, 192, 19);
    contentPane.add(hint);

    //Generates the button that should call for the creation of the new number
    btnGenerate = new JButton("Generate number");
    btnGenerate.setFont(new Font("Lucida Grande", Font.PLAIN, 10));
    btnGenerate.setBounds(165, 153, 117, 29);
    contentPane.add(btnGenerate);
    btnGenerate.addActionListener(genRanNum);

    //Generates button that will be used to enter the number
    btnEnter = new JButton("Enter");
    btnEnter.setBounds(269, 59, 58, 29);
    contentPane.add(btnEnter);
}

public class GenerateRandomNumber implements ActionListener {

    public void actionPerformed(ActionEvent e) {

        ranNum = (int) (Math.random() * 101);

        hint.setText("The number has been created!");
    }

}

}

java swing actionlistener
1个回答
0
投票
private GenerateRandomNumber genRanNum;

您的随机数生成器为null。我看不到您在哪里创建它的实例。

btnGenerate.addActionListener(genRanNum);

上面的语句不执行任何操作,因为变量为空。

我什至不知道您的GenerateRandomNumber类如何编译,因为它无法访问您的” Principal”类的” hint”变量。

不要将GenerateRandomNumber类设为公共类。而是使其成为“ Principal”类的内部类。

阅读有关How to Use Actions的Swing教程的部分,以获取有关如何使用内部类的示例。请注意,您甚至可以使用Action代替ActionListener。

© www.soinside.com 2019 - 2024. All rights reserved.