こんにちは 私はMainWindowにStuffのリストであるJTableを持っています。そのうちの1つをダブルクリックすると、(新しいウィンドウで)新しいフレームを開くdetailViewがあります。今、1つのdetailViewが既に開いている場合、新しいものを開く代わりにどのように再アクティブ化できますか? Javaで可視フレームの配列を取得できますか?新しいフレームを開く代わりにフレームを再アクティブ化する
ありがとうございました!
こんにちは 私はMainWindowにStuffのリストであるJTableを持っています。そのうちの1つをダブルクリックすると、(新しいウィンドウで)新しいフレームを開くdetailViewがあります。今、1つのdetailViewが既に開いている場合、新しいものを開く代わりにどのように再アクティブ化できますか? Javaで可視フレームの配列を取得できますか?新しいフレームを開く代わりにフレームを再アクティブ化する
ありがとうございました!
コントローラクラスを作成しました。これは、キーでハッシュマップ内のすべてのdetailViewsを持っています。コントローラにはメソッドshow(Stuff s)があり、sが既にリストにある場合はdetailView.toFront()を実行し、そうでない場合は新しいdetailViewを作成してハッシュマップに挿入します。
CardLayout
をdetailView
に入力する方法は、それぞれStuff
の子パネルを置くことです。そして、子パネル間を切り替えます。利点は、Stuff
のパネルを切り替えるときにdetailView
のサイズが変わらないことです。しかし、あなたはすべてのもののための不必要なパネルを作成します。
別の方法は、いくつかの方法showStuff(Stuff s)
とJFrame
を拡張することである(または内部JFrame
のインスタンスを含み、いくつかの基本的な方法を提供するクラスを作る:show
、close
、showStuff
)フレームの内容をクリアして新しいものを示しています。
私はあなたがframe.setVisible(true);
を使用する場合、フレームがオープンフレーム、あなたのいずれかの数を示すために
をフォーカスを取得したと思う:そして、あなたはあなたのメインウィンドウであなたのフレームの配列を持っている場合は
1)あなたはこの
getOpenedFrames() {
int openedFrames = 0;
for(int i=0; i<arraOfFrames.length; i++) {
JFrame frame = arrayOfFrames[i];
if(frame.isVisible) openedFrames++;
}
return openedFrames;
}
OR
を行うことができます102)あなたは、フレームの配列を持っていない場合は、開かれたフレーム数のトラックに保つためにフラグint型を使用します。1で
int openedFrames = 0;
新しいフレームが開かれるたびに、増分openedFramesをフレームが閉じるたびに1フレームずつ減分します。
まず、「詳細」ウィンドウはJFrameであってはなりません。それは(モーダル?)ダイアログでなければなりません。
テーブルの行ごとに1つの詳細ダイアログが必要な場合や、テーブル全体で1つのダイアログが必要な場合は、質問からわかりません。
テーブルのダイアログを1つ作成したい場合は、解決策は簡単です。モーダルダイアログを使用するだけで、別のダイアログを開く前に詳細ダイアログを閉じる必要があります。
複数のダイアログが必要な場合は、HashMapを使用して開いているダイアログを追跡します。たぶんキーとして行番号を使用し、値としてダイアログを追加します。ダイアログにWindowListenerを追加します。ダイアログが開いたり閉じたりするたびに、HashMapを更新します。