Java - JToggleButton - 虽然无限循环 - 不能点击按钮两次

时间:2017-05-19 10:52:24

标签: java swing loops user-interface button

我需要请帮助。 我有一个Java代码,我有一个小GUI。 我无法点击按钮两次。 我可以onlx激活while循环,但我无法将其停用。

这是我的代码:

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Test2 {

public static void main(String[] args) {

    JFrame Frame = new JFrame("");
    Frame.setBounds(100, 100, 450, 300);
    Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Frame.setVisible(true);

    JPanel Panel = new JPanel();
    Frame.add(Panel);

    JToggleButton toggle = new JToggleButton("");
    Panel.add(toggle);
    toggle.setPreferredSize(new Dimension(50,50));
    toggle.addActionListener(new ActionListener() {


        public void actionPerformed(ActionEvent arg0) {
            int zufallszahl;
            if(toggle.isSelected()) {
                while(toggle.isSelected())      {

                zufallszahl = (int)(Math.random() * 10 +1);
                System.out.println(zufallszahl);
                }

            }               
        }
    }); 
}

}

2 个答案:

答案 0 :(得分:2)

你的问题在这里:

            while(toggle.isSelected())      {

                zufallszahl = (int)(Math.random() * 10 +1);
                System.out.println(zufallszahl);
            }

据我所知,您希望在选择按钮时生成随机数。要实现它,您需要SwingWorkerTimer

以下是计时器的示例:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.Timer;

public class Test2 {

    public static void main(String[] args) {

        JFrame frame = new JFrame("");
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        frame.add(panel);

        final Timer timer = new Timer(300, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                int zufallszahl = (int)(Math.random() * 10 +1);
                System.out.println(zufallszahl);
            }
        });
        final JToggleButton toggle = new JToggleButton("Go");
        panel.add(toggle);
        toggle.addActionListener(new ActionListener() {


            @Override
            public void actionPerformed(ActionEvent arg0) {
                if (toggle.isSelected()) {
                    timer.restart();
                } else {
                    timer.stop();
                }
            }
        }); 
    }

}

答案 1 :(得分:0)

如果您取消选择,您的循环将停止。 最好创建一些boolean run = true;外行动执行。 然后将其值放在while循环中而不是.isSelected(); 同时删除if-do循环重复的if语句。 如果你想使用do-while循环,你需要它。