【发布时间】:2012-12-16 09:03:30
【问题描述】:
我有一个问题,我不能突然出现。我必须制作一个狂野的图形界面,在某个事件或特定算法的某个动作(如有限状态机)之后启用按钮。
我决定创建两个类,一个用于 GUI,另一个是创建框架后运行的线程。
现在必须等到消息到达套接字,之后他们必须启用一个按钮,然后必须等待您按下此按钮并随后启用两个,依此类推。
然后我在 Frame 类中创建了静态按钮,用于启用/禁用相应的线程。
这是不是一个正确的解决方案?
有没有办法使用 GUI 创建“类似有限状态机”?
--编辑--
我有一个创建 GUI 的控制器类。创建之后,我调用应该运行算法的“类过程”。
在 I 类 CONTROLLER 中的按钮和图形对象静态
静态 JButton btn1; 静态 JPanel panel1 静态 JButton btn2;
在 PROCEDURES 类中,将调用上面列出的各项的方法。
例子:当你可以看到Frame时我需要检查一个特定的变量,只需更改,我需要启用btn1 ..按下btn1后,我可以使用btn2,等等..
那么作为解决方案是否正确?
--- 编辑 2 ---
public class Controller extends JFrame {
static JButton btn1;
static JPanel panel1;
static JButton btn2;
public Controller() {
JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.CENTER);
panel.setLayout(new GridLayout(7, 1, 0, 0));
//PANEL
panel1 = new JPanel();
FlowLayout flowLayout_1 = (FlowLayout) panel_1.getLayout();
flowLayout_1.setAlignment(FlowLayout.LEFT);
panel_chkCom0.add(panel_1);
btn1 = new JButton("BUTTON 1");
btnChk.setEnabled(false);
btnChk.setPreferredSize(new Dimension(300, 50));
panel_1.add(btn1);
panel.add(panel1);
//TODO
//When I finish init myself, call my manager thread
Thread t = new Thread(new SetupProcedure());
t.start();
}
}
public class SetupProcedure implements Runnable {
protected boolean btnChkIsPress = false;
public void run(){
SetupManager();
}
public void SetupManager() {
final long POLLING_TIME = 600000;
boolean isOff = true;
long pollingTime = 0;
//Check if it's on
while(isOff){
//SIMULATE READING FROM REGISTER
try {
Thread.sleep(3000);
PWisOff = false;
Controller.btn1.setEnabled(true);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
SetupController.btn1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
btnChkIsPress = true;
}
});
while(!btnChkIsPress){
System.out.println("..wait..");
}
SetupController.btn2.setEnabled(true);
...OTHER...
public String getResponseFromKernel(String request){
String s = "Response";
return s;
}
}
【问题讨论】:
-
需要先看看你的代码
-
您的问题相当主观。这取决于你是如何编码的。没有更多信息,我们无法判断一个“正确”的解决方案。
标签: java multithreading user-interface background