例では、メインフレームにすべての顧客情報を表示するjtableがあり、ユーザーが新しい顧客を作成できるようにする新しいJFrameを開く作成ボタンがありました。ユーザーが複数の作成フレームを開けないようにしたい。 SwingコンポーネントまたはAPIはそれを行うことができますか?またはメインフレームを無効にするにはどうすればよいですか? JDialogのようなもの。
新しい顧客ダイアログをモーダルJDialog
にして、表示されている間はアプリ内の他のダイアログ/フレームからの入力を許可しないことをお勧めします。詳細は modality tutorial をご覧ください。
私はあなたが新しいものを開こうとするときメインjframeのためにこのコードを使うべきだと思います:
this.setEnabled(false);
遅い回答で申し訳ありませんが、シングルトンデザインパターンを検討しましたか?クラスが必要なときはいつでも、クラスの同じインスタンスを返します。したがって、ユーザーがフレームに詳細を入力したい場合、開いているフレームは1つだけです(同じインスタンス)。
それはこのようなものになります:
private static MySingleFrame instance = null; //global var
private MySingleFrame() { } //private constructor
private static MySingleFrame getInstance()
{
if(instance == null)
{
instance = new MySingleFrame();
}
//returns the same instance everytime MySingleFrame.getInstance() is called
return instance;
}
最初のフレームでfirstFrame.setVisible(false)
を使用するだけです。これにより非表示になります。
より一般的なアプローチが必要な場合は、現在表示されているフレームへの参照をどこかに設定し、新しいフレームの表示が要求されたときに変更することができます
JFrame currentFrame;
void showRequest(JFrame frame)
{
currentFrame.setVisible(false);
currentFrame = frame;
currentFrame.setVisible(true);
}
以下を使用できます。
private void btn_NewFormActionPerformed(Java.awt.event.ActionEvent evt) {
this.hide();
new Frm_NewFormUI().setVisible(true);
}