【发布时间】:2013-03-18 18:39:44
【问题描述】:
所以,我只是在做一个小游戏,除了 GUI 之外,它运行得很好。基本上,我需要在单击按钮时修改 GUI。我意识到我必须使用以下代码在 EDT 上运行我的代码:
EventQueue.invokeLater(new Runnable () {
@Override
public void run() {
// some code
}
});
我现在只是不知道我的代码的哪一部分与此有关。我创建 GUI 的部分(我的类的构造函数)?或者只是我修改值的部分(在这种情况下Listener.actionPerformed())?实际上我测试了这个机器人,都没有成功。
现在我想知道的是如何修改以下代码以在单击按钮时更新按钮?我必须在上面的代码中嵌入它的一部分还是我完全错了?
package edttest;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class EDTtest {
public static void main(String[] args) {
GUI gui = new GUI ();
}
private static class GUI extends JFrame {
int x;
public GUI () {
x = 0;
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
JButton button = new JButton (String.valueOf(x));
button.addActionListener(new Listener ());
JLabel label = new JLabel (String.valueOf(x));
add (label, BorderLayout.NORTH);
add (button);
pack();
setVisible (true);
}
private class Listener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
x++;
System.out.println (x);
}
}
}
}
【问题讨论】:
-
“如何修改下面的代码来更新Button” 用什么方式更新?
-
private static class GUI extends JFrame {1)static很少有帮助。 2)不要扩展框架,只使用一个实例。 -
@AndrewThompson 我不同意你的建议,他们俩。
-
@MouseEvent 对你有好处!
标签: java swing jlabel settext eventqueue