2012-03-23 4 views
0

Iこの新しいjFrameダイアログを開いてメインインターフェイスに戻る方法は?

private void botaoConfIOMouseClicked(java.awt.event.MouseEvent evt) {           
ConfigurarIO popup = new ConfigurarIO(); 
popup.setVisible(true); 

botaoConfIO.setEnabled(false); //this line to avoid multiple dialogues 
setIO=popup.getConfig(); //i need to get this boolean from the dialogue "ConfigurarIO" 
//part of the program only to make my logic from the setIO 
if(setIO[0]==false){ 
    jToggleButton1.setEnabled(false); 
    jToggleButton1.setText("Saída"); 
} 
else{ 
    jToggleButton1.setEnabled(true); 
    if(jToggleButton1.isSelected()) jToggleButton1.setText("Pino 1 ON"); 
    else jToggleButton1.setText("Pino 1 OFF"); 

} }

を試み、この問題は、私はこれを設定した場合setIOは、第2のインターフェースによって変更されないことである対話

public class ConfigurarIO extends javax.swing.JFrame { 

boolean[] inOut=new boolean[8]; 
boolean ok=false; 
/** Creates new form ConfigurarIO */ 
public ConfigurarIO() { 
    initComponents(); 
} 

public boolean[] getConfig(){ 
    return inOut; 
} 

public boolean getOK(){ 
    return ok; 
} 

public void setOK(){ 
    ok=false; 
} 
//the logic was emited 
private void botaoOKMouseClicked(java.awt.event.MouseEvent evt) {          
dispose(); 
ok=true; 
System.out.println(ok); 
}  

あります"ok"ブール値だけでループが壊れるようにするには、設定インターフェースを持つウィンドウが開きません。これは非常に掘り下げられた問題ですが、私はNetbeansを初めて勉強しており、Googleでそれを見つけることができませんでした。おかげ注意

プリントスクリーンのために:http://4.bp.blogspot.com/-B7VWmPelJek/T2ysJV8PJcI/AAAAAAAABqQ/0waWxxEEHkw/s320/temp.png

答えて

1

あなたは、フレームが何らかの理由で、またはダイアログがどうなるか、またはモーダルにする必要がされているものかどうかを必要とされているかどうかを語っていません。

ループするとフレームが表示されない理由は、マウスクリックに反応したルーチン内にあるため、Swingディスパッチスレッドを使用していることです。画面を更新します。

"フレームダイアログ"でメソッドを呼び出して、ダイアログで値が設定されるまで値を取得することはできません。私は、コンストラクタ上のパラメータとしてダイアログに呼び出しクラスを渡して、それが完了した時点でダイアログコードが呼び出し側クラスのメソッドを呼び出させるようにします。このことがいつ起こるかを知る必要がある場合は、コールクラスのイベントとして扱う必要があります。私は、あなたが全体的にやろうとしていることについてもっと知らずに、あなたが必要とするものを推測することはできません。

ダイアログが完了するまで待つ必要があり、完了するまでユーザーが何もできる必要がない場合は、「モーダル」ダイアログが必要です.JOptionPaneあなたがやりたいことのためのさまざまなダイアログオプションがあります。あなたのクラスからの呼び出しは同期することができます。つまり、ダイアログを呼び出すことができ、呼び出しが完了するとダイアログがすべて完了します。次に、コールクラスをフレームに渡す必要はありません。これは、完了したことを通知する必要はないためです。あなたの呼び出しが完了したらそれが完了していることを知っていますし、すでに行ったようなメソッドを呼び出して、必要な値を取得することもできます。

ちなみに、あなたのsubclass-of-JFrameコンストラクタはsuper()を呼び出しません。私はあなたがそれを行うことをお勧めします...

RC

+0

ヒントは、ダイアログを使用しました。私は新しいjDialogを作成し、別のjFrameで使用していたコードをコピー/ペーストします。このようにして、コードは動作します、ありがとう。ダイアログを表示するには、jDialog1 [jDialog]アイコンの右ボタンをクリックしてボタンを押す必要があります。ちょうど明確にするために、このダイアログのアイデアは、入力または出力であるかどうかに応じて、このメインパネル内のボタンを有効または無効にするためにメインパネルをオン/オフ設定にすることです。 – user1288705

関連する問題