私はユーザに尋ねる小さなフレームを持っています&パスワード。このフレームは、メインウィンドウのボタンをクリックすると開きます。javaスイング閉じるウィンドウなしのアプリケーションなし
次に、私はokとキャンセルの2つのボタンがあります。
「キャンセル」ボタンをクリックすると、アプリケーションを終了せずにこのフレームを閉じる必要があります。
どうすればいいですか?
私はユーザに尋ねる小さなフレームを持っています&パスワード。このフレームは、メインウィンドウのボタンをクリックすると開きます。javaスイング閉じるウィンドウなしのアプリケーションなし
次に、私はokとキャンセルの2つのボタンがあります。
「キャンセル」ボタンをクリックすると、アプリケーションを終了せずにこのフレームを閉じる必要があります。
どうすればいいですか?
Frame.hide()またはFrame.dispose()のいずれかを使用できます。 また、JDialogまたはJOptionPaneを調べることをお勧めします。
修正:hide()は推奨されていません。代わりにSetVisible(false)を使用する必要があります。
フレームでsetVisible(false)を呼び出すことができます。
また、HIDE_ON_CLOSEで渡されるフレームでsetDefaultCloseOperation(info here:http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29)を呼び出すこともできます。そうすれば、ユーザーがJFrameの「X」を押して閉じることができれば、アプリが逃げるのを防ぐことができます。
は、あなたがいないことを確認してください:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
これは私の問題のバディではありません:) – Giancarlo
をあなたはJFrame
を実装している外部クラス内の関数を作成します(あなたがボタンを押すと、キャンセルに閉じる必要があります)。
その機能の実装にthis.setVisible(false);
を書きます。
最後に、ActionListener
の実装でこの関数を呼び出します。
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
たぶんきれいな方法は、ちょうどDISPOSE_ON_CLOSEにEXIT_ON_CLOSEからsetDefaultCloseOperationを変更です。例えば:
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ただ置き換える イベントを処理するために内部クラスを使用している場合は();
を使用this.dispose();
アクションリスナーメソッドでは、ユーザー名/パスワードが成功したとき:
あなたは多くの方法でそれを行うことができますが、これらの二つの方法は、内部に1
1.書き込みthis.setVisible(false)
がActionListener
それともthis.dispose()
は内部ActionListener
を実装
2.書き込みを実現し、最も利用可能です。 これがあなたを助けてくれることを願っています。
これは受け入れられた答えが言うものです。既に受け入れられていることを繰り返すだけの理由はありません。 –
setVisibleメソッドはメモリリソースを解放しないため、フォームを再度使用する場合にのみ使用してください。
disposeメソッドこのWindow、そのサブコンポーネント、および所有するすべての子によって使用されるすべてのネイティブスクリーンリソースを解放します。つまり、これらのコンポーネントのリソースは破棄され、消費するメモリはすべてOSに返され、表示不可能とマークされます。
ok、クリックハンドラがフレームとは別のクラスにある場合はどうなりますか? – Giancarlo
(コンストラクタ内の)クリックハンドラへのフレームへの参照を渡す必要があります – TofuBeer