問題が発生しました。特定のイベントまたは特定のアルゴリズム (有限状態マシンなど) の特定のアクションの後にボタンが有効になるワイルドなグラフィカル インターフェイスを作成する必要があります。
2 つのクラスを作成することにしました。1 つは GUI 用で、もう 1 つはフレームの作成後に実行されるスレッドです。
メッセージがソケットに到着するまで待つ必要があります。その後、ボタンを有効にし、このボタンを押して 2 つ有効にするまで待つ必要があります。
次に、適切なスレッドを有効/無効にするための静的ボタンを Frame クラスに作成しました。
これは正しい解決策ですか?
GUIで「有限状態マシンのような」ものを作成する方法はありますか?
- 編集 -
GUI を作成するクラス Controller があります。それが作成されたら、アルゴリズムを実行する「クラス プロシージャ」を呼び出します。
クラス I CONTROLLER のボタンとグラフィック オブジェクト static
static JButton btn1; static JPanel panel1 static JButton btn2;
クラス PROCEDURES では、上記の項目のメソッドを呼び出します。
例: Frame I need to check a specific variable, just change, I need to enable btn1 .. btn1 を押した後、I abiliare 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;
}
}