Java-JToggleButton-无止境循环时-不能单击按钮两次

Java-JToggleButton-无止境循环时-不能单击按钮两次,java,swing,loops,user-interface,button,Java,Swing,Loops,User Interface,Button,我需要你的帮助。 我有一个Java代码,其中有一个小GUI。 我不能按两次按钮。 我只能激活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[] ar

我需要你的帮助。 我有一个Java代码,其中有一个小GUI。 我不能按两次按钮。 我只能激活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);
                }

            }               
        }
    }); 
}

}如果取消选择,循环将停止。 最好创建一些布尔值run=true;执行外部操作。 然后将其值放入while循环,而不是.isSelected(); 同时删除whiledo循环重复的if语句。
如果要使用do while循环,则需要它。

如果取消选择,则循环将停止。 最好创建一些布尔值run=true;执行外部操作。 然后将其值放入while循环,而不是.isSelected(); 同时删除whiledo循环重复的if语句。 如果要使用do while循环,则需要它。

您的问题在于:

            while(toggle.isSelected())      {

                zufallszahl = (int)(Math.random() * 10 +1);
                System.out.println(zufallszahl);
            }
据我所知,您希望在选择按钮时生成随机数。要实现它,您需要一个或一个

下面是一个带有计时器的示例:

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();
                }
            }
        }); 
    }

}
你的问题是:

            while(toggle.isSelected())      {

                zufallszahl = (int)(Math.random() * 10 +1);
                System.out.println(zufallszahl);
            }
据我所知,您希望在选择按钮时生成随机数。要实现它,您需要一个或一个

下面是一个带有计时器的示例:

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) 请学习常见的Java命名法(命名约定-例如
EachWordUpperCaseClass
firstWordLowerCaseMethod()
firstWordLowerCaseAttribute
,除非它是
大写常量
),并一致使用它。2) 请参阅(是)3)不要阻止EDT(事件调度线程)。发生这种情况时,GUI将“冻结”。有关详细信息和修复方法,请参见。1)请学习常见的Java命名法(命名约定-例如,
EachWordUpperCaseClass
firstWordLowerCaseMethod()
firstWordLowerCaseAttribute
,除非它是一个
大写常量
),并始终如一地使用它。2) 请参阅(是)3)不要阻止EDT(事件调度线程)。发生这种情况时,GUI将“冻结”。有关详细信息和修复方法,请参阅。Vielen Dank für die schnelle and hilfreiche Antwort:)@Danielventic keine Ursache。Vielen Dank für die schnelle and hilfreiche Antwort:)@Danielventic keine Ursache。