我需要请帮助。 我有一个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);
}
}
}
});
}
}
答案 0 :(得分:2)
你的问题在这里:
while(toggle.isSelected()) {
zufallszahl = (int)(Math.random() * 10 +1);
System.out.println(zufallszahl);
}
据我所知,您希望在选择按钮时生成随机数。要实现它,您需要SwingWorker或Timer。
以下是计时器的示例:
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循环,你需要它。