【发布时间】:2015-02-10 17:36:28
【问题描述】:
我一直在制作一个战舰程序,我一直在尝试使用 GUI,但它不想工作。理论上它应该工作的方式是GUI启动,它将一个问题输出到一个框(有效),然后计算机等待并且不执行任何操作,直到您在回答问题的答案后按下按钮。问题是,我的方法一直等到您单击按钮以获取文本字段中的数据时才执行任何操作。我写了一段类似的代码来演示我的问题。
Test.java(主类)
package taest;
import javax.swing.*;
public class Test {
public static void main(String args[]){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
@SuppressWarnings("unused")
JFrame frame = new Frame();
}
});
Frame.display.setText(getButtonClick());
}
public static String getButtonClick(){
while(true){
if (Frame.hasClicked){
break;
}
}
return Frame.text.getText();
}
}
Frame.java(框架类) 打包测试;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Frame extends JFrame{
JFrame panel = new JFrame("Something");
public static JTextArea text = new JTextArea();
JButton button = new JButton("Click");
public static JTextField display = new JTextField("NOthing");
static boolean hasClicked = false;
static String storage = "";
public Frame(){
setLayout(new BorderLayout());
setSize(400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
hasClicked = true;
storage = text.getText();
}
});
Container c = getContentPane();
c.add(display, BorderLayout.CENTER);
c.add(text, BorderLayout.PAGE_START);
c.add(button, BorderLayout.PAGE_END);
setVisible(true);
}
}
【问题讨论】:
-
static不是类间通信的机制,在 GUI 环境中尤其无用。 -
您考虑使用Observer Pattern
标签: java swing user-interface awt jbutton