マウス クリックのイベントで JDesktopPane に追加される複数の JInternalFrames を持つ Swing アプリケーションを作成しました。同じ内部フレームのインスタンスを 1 つだけ DesktopPane に表示したい。ユーザーがフレームを開いたときに、同じフレームが 2 回表示されるのは望ましくありません。
6 に答える
問題の簡単な解決策は、を作成することHashMap<String,JInternalFrame>
です。はそのkey
タイトルにJInternalFrame
なりvalue
、object
現在開いているものになります。内部フレームを最初に開いたときにJInternalframe
(key,value
)ペアを保存します。ユーザーが表示されたウィンドウを破棄できないように、HashMap
すべてのウィンドウの閉じるボタンを無効にします。各オブジェクトにキーを登録し、キーボードのボタンを押したときに現在の表示が最小化されるようにします。次に、クリックして同じ内部フレームを開くときに、そのフレームがとして存在するかどうかを確認します。存在する場合は、そのためにを取得しますJInternalFrame
JInternalFrame
esc
JInternalFrame
esc
JInternalFrame
DesktopPane
menu item
title
JInternalFrame
HashMap
key
value
key
変数で参照してからJInternalFrame
、で同じものを復元しDesktopPane
ます。の対応するエントリがその中にtitle
存在しない場合はHashMap
、新しいJInternalFrame
オブジェクトを作成し、に同じエントリを作成しHasMap
て表示します。
注:ここに投稿したものは、
JInternalFrame
それぞれが固有の異なる多くのタイプを持つことができ、それぞれのfunctionality
1つだけを保持したいという状況の解決策です。instance
JInternalFrame
これが5月のサンプルコードです。この助けを願っています。JdesktopPane が含まれるメイン アプリケーションの内部フレームを呼び出すメニュー アクション。
private void YourJinternalFrameMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
YourJinternalFrame nw = YourJinternalFrame.getInstance();
nw.pack();
//usefull part for you.. if open shows, if not creates new one
if (nw.isVisible()) {
} else {
desktopPane.add(nw);
nw.setVisible(true);
}
try {
nw.setMaximum(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(MainApplication.class.getName()).log(Level.SEVERE, null, ex);
}
}
これを YourJinternalFrame の中に入れます
private static YourJinternalFrame myInstance;
public static YourJinternalFrame getInstance() {
if (myInstance == null) {
myInstance = new YourJinternalFrame();
}
return myInstance;
この簡単なコードを試してください:
YourJinternalFrame nw = new YourJinternalFrame();
private void YourJinternalFrameMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
if(!nw.isVisible()){
YourJDesktopPane.add(nw);
nw.setVisible(true);
}
}
この単純なコードを試して、クラス変数 chk を取り、0 に設定してから、このセット chk =0 で削除された jframe メソッド componentremoved をもう一度呼び出します。