Java-JToggleButton-无止境循环时-不能单击按钮两次
我需要你的帮助。 我有一个Java代码,其中有一个小GUI。 我不能按两次按钮。 我只能激活while循环,但无法将其停用 这是我的密码: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
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。