我正在尝试创建一个具有这种条件的 while 循环。 (a > 1) 基本上。每次a设置为大于1时,它都会关闭我创建的JFrame,然后重新启动程序。我的问题是,当我尝试在操作监听器中编辑整数“a”时,它无法识别它已经被声明。实际描述起来有点困难,所以这是我的代码。
public class TestBox {
public static void main(String[] args) {
int a = 2;
while(a > 1){
a = 0;
JFrame frame = new JFrame("Test Box");
frame.setSize(1200, 800);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setResizable(true);
frame.setLayout(new GridLayout(6, 6, 1, 1));
JPanel panelAOne = new JPanel();
JPanel panelATwo = new JPanel();
JPanel emptySpace = new JPanel();
JLabel labelAOne = new JLabel();
labelAOne.setFont(new Font("Aerial", Font.ITALIC, 21));
labelAOne.setText("Welcome to the Test Box!");
JLabel labelATwo = new JLabel();
labelATwo.setFont(new Font("Aerial", Font.ITALIC, 21));
labelATwo.setText("Where would you like to go?");
JLabel emptyLabel = new JLabel("stuff goes here");
JButton buttonAOne = new JButton("Colors");
panelAOne.add(labelAOne);
panelAOne.add(labelATwo);
panelATwo.add(buttonAOne);
emptySpace.add(emptyLabel);
frame.add(panelAOne);
frame.add(buttonAOne);
frame.add(emptySpace);
frame.setVisible(true);
buttonAOne.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
a = 2;
//If this code is left as is, a GUI will open endlessly until it crashes the computer
}
}
});
}
}
最佳答案
您似乎试图将线性控制台程序硬塞到 Swing 事件驱动的 GUI 程序中,反之亦然,但您确实不想这样做,我建议您重新构建您的程序。相反,显示您的 GUI,获取输入,如果错误,则在 GUI 中重新请求输入。不要为此使用控制台类型的程序 while 循环。
因此,例如,如果 ActionListener 发现输入无效,请通过在 JTextField 上调用 setText("")
来清除 JTextField 中的文本,向用户显示一个 JOptionPane 通知他们输入错误并等待再次按下按钮。但保留 JFrame 显示。
编辑:我什至在您的代码中没有看到 JTextField,因此我不确定用户应该在哪里输入内容。
关于java - 如何循环回到程序开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28198593/