Javaは、アプリを終了せずにウィンドウを閉じるスイング
質問
私は、ユーザーとパスワードを聞いて少し枠を持っています。このフレームは、メインウィンドウのボタンの上をクリック開かれます。
[OK]と[キャンセルそして、私は2つのボタンがあります。
私は「キャンセル」ボタンをクリックすると、私はアプリを終了せずに、このフレームを閉じる必要があります。
私はそれを行うことができますどのように?
解決
あなたはどちらかFrame.hide()またはFrame.dispose()を使用することができます。 私も使って、JDialogまたはのJOptionPaneを検討することをお勧めします。
訂正:非表示()は推奨されません。 (偽)のsetVisibleを代わりに使用する必要があります。
他のヒント
たぶん、きれいな方法は、ちょうどEXIT_ON_CLOSEからDISPOSE_ON_CLOSEにsetDefaultCloseOperationに変更されます:
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
あなたは、フレーム上のsetVisible(false)を呼び出すことができます。
ここでまた、(HIDE_ON_CLOSEに渡すフレームにsetDefaultCloseOperationを呼び出したいかもしれません情報:<のhref = "http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html #setDefaultCloseOperation%28int%29" nofollowをnoreferrer = "REL"> http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29 の) 。それは、彼らは、ユーザーがそれを閉じるためのJFrameの「X」をヒットした場合に遠ざかるからアプリを防止します。
ユーザー名/パスワードが成功したアクションリスナメソッドで使用しthis.dispose();
。例えばます:
public void actionPerformed(ActionEvent ae) {
if(ae.getSource()=="button you press to confirm username/password"){
if(userNameTf.getText().equals(username)&&isPassword(passwordTf.getPassword())){
new "window to be opened upon success"
this.dispose(); // calls dispose on this object ie.
// the login window
}
else{
userNameTf.setText("");
passwordTf.setText("");
JOptionPane.showMessageDialog(this,
"Username and/or password is incorrect!",
"Attention!",
JOptionPane.WARNING_MESSAGE);
}
}
}
あなたがイベントを処理するために内部クラスを使用している場合 単に置き換えるSuper_Class_Name.this.dispose()で 'this.dispose(');
あなたがいないことを確認してください
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
のsetVisibleメソッドは、メモリリソースを解放しないと、フォームを再使用する場合にのみ使用する必要があります。
を処分のメソッドリリースこのウィンドウで使用されるネイティブスクリーンリソースをすべて、そのサブコンポーネント、その所有されたすべての子。それは、これらのコンポーネントのためのリソースが破壊されている、彼らは消費する任意のメモリがOSに返されます、そして、彼らは表示不可能としてマークされます。
あなたは(あなたがボタンを押すと、キャンセルに閉じる必要があります)JFrame
を実装している外部クラス内の関数を作成します。
その関数の実装でthis.setVisible(false);
を書く。
あなたはそれを閉じたいときに最後にActionListener
の実装では、この関数を呼び出します。
あなたは多くの方法でそれを行うことができますが、これらの二つの方法は、1
最も利用可能です
1.書き込みの this.setVisible(false)
内部実装ではのActionListener
のを
または
2.書き込みの this.dispose()
のActionListener
の実装内部の。
これはあなたを助けることを願っています。