【发布时间】:2012-08-24 08:59:49
【问题描述】:
我希望每次单击按钮时 main 都应打印 hello(在弹出对话框中)。所以我设计了以下程序,但它似乎不起作用。该程序编译并执行得很好,但是当我单击按钮时,我看不到任何对话框弹出。我已经放置了布尔变量 (button_clicked) 的 getter 和 setter,其值正在 main() 块中进行测试。 知道的请帮忙..
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class abc extends JFrame implements ActionListener{
boolean button_clicked = false;
JButton b1;
abc(){
this.setSize (400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.createUI();
}
void createUI(){
this.setLayout(null);
b1 = new JButton("x");
b1.setSize(110,30);
b1.setLocation(10,210);
this.add(b1);
b1.addActionListener(this);
}
public boolean isButton_clicked() {
return button_clicked;
}
public void setButton_clicked(boolean button_clicked) {
this.button_clicked = button_clicked;
}
public void actionPerformed(ActionEvent arg0) {
button_clicked = true;
//I don't want to print the dialogue box from here..
//I want to keep everything under main()'s control.
}
}
public class tempMain extends JFrame {
public static void main(String[] args) {
abc temp = new abc();
temp.setVisible(true);
while(true){
if(temp.isButton_clicked())
JOptionPane.showMessageDialog(null, "Hello");
}
}
}
【问题讨论】:
-
你不应该使用这样的while循环。这有很多设计缺陷。您的 While 循环将 1 占用 CPU,因为它从不休眠。如果您必须使用这样的while循环,那么至少在一个新线程中创建它并在每次迭代后使线程休眠。然而,这仍然是一个糟糕的设计。
-
为什么你的代码中有 cmets?如果你要坚持为你的程序设计一个糟糕的设计,至少要证明它的理由。
-
@Hovercraft:我猜这个评论是在请求 modeless 对话并播放
PropertyChangeListener卡片。 -
@trash:你的猜测和其他人一样好,因为原始发帖人似乎不想透露他请求背后的动机。
-
请学习java命名约定并遵守它们。在您学习的过程中:永远不要手动调整/定位组件,这是合适的 LayoutManager 的专属任务。
标签: java swing jframe jbutton propertychangelistener