ユーザーとパスワードを尋ねる小さなフレームがあります。このフレームは、メイン ウィンドウのボタンをクリックして開きます。
次に、[OK] と [キャンセル] の 2 つのボタンがあります。
「キャンセル」ボタンをクリックすると、アプリを終了せずにこのフレームを閉じる必要があります。
どうやってやるの?
Frame.hide() または Frame.dispose() のいずれかを使用できます。JDialog または JOptionPane を調べることもお勧めします
訂正: hide() は非推奨です。代わりに SetVisible(false) を使用する必要があります
おそらく、よりクリーンな方法は、 setDefaultCloseOperation を EXIT_ON_CLOSE から DISPOSE_ON_CLOSE に変更することです。
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
フレームで setVisible(false) を呼び出すことができます。
HIDE_ON_CLOSE を渡すフレームで setDefaultCloseOperation を呼び出すこともできます (情報はこちら: 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);
}
}
}
内部クラスを使用してイベントを処理している場合は、'this.dispose()' を Super_Class_Name.this.dispose(); に置き換えてください。
次のことをしないでください。
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible メソッドはメモリ リソースを解放しないため、フォームを再度使用する場合にのみ使用する必要があります。
disposeメソッドは、この Window、そのサブコンポーネント、および所有するすべての子によって使用されるすべてのネイティブ画面リソースを解放します。つまり、これらのコンポーネントのリソースは破棄され、消費されるメモリは OS に返され、表示不可としてマークされます。
を実装している外部クラスに関数を作成しますJFrame
(キャンセルボタンを押すと閉じる必要があります)。その関数の実装を記述します
。
最後に、この関数を閉じたいときに実装で呼び出します。this.setVisible(false);
ActionListener
多くの方法でそれを行うことができますが、これらの
2つの方法が最も使いやすいもの
です。これがあなたを助けることを願っています。this.setVisible(false)
ActionListener
this.dispose()
ActionListener