【问题标题】:Java - JToggleButton - While endless Loop - Cant click button twiceJava - JToggleButton - 无限循环 - 无法单击按钮两次
【发布时间】:2017-10-19 11:22:16
【问题描述】:

我需要请帮忙。 我有一个 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);
                }

            }               
        }
    }); 
}

}

【问题讨论】:

标签: java swing loops user-interface button


【解决方案1】:

你的问题在这里:

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

}

【讨论】:

  • Vielen Dank für die schnelle und hilfreiche Antwort :)
  • @DanielFntic keine Ursache。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2013-12-27
    相关资源
    最近更新 更多