2013-03-17 82 views
0

我創建了一個Swing應用程序,其中包含多個JInternalFrame,在鼠標單擊事件時將其添加到JDesktopPane。我只想要在DesktopPane中存在相同內部框架的一個實例。我不想當用戶打開框架時出現兩次相同的框架..一次只能打開一個JInternalFrame

+2

向我們展示什麼,你都試過了。 – 2013-03-17 13:01:31

+0

我用這種方法「removeAll()」 – pixylife 2013-03-17 13:18:11

+0

想法是:如果你點擊一個標籤或按鈕,使用setEnable(false),這將禁用按鈕,直到用戶關閉InternalFrame,然後啓用按鈕。 – Azad 2013-03-17 13:29:39

回答

2

簡單的解決方案是您的問題是創建一個HashMap<String,JInternalFrame>key將標題JInternalFramevalueobjectJInternalframe當前打開。當第一次打開內部框架時保存(key,value)對HashMap。禁用所有JInternalFrame窗口的關閉按鈕,以便用戶不能處理顯示的JInternalFrame窗口。註冊esc關鍵各JInternalFrame對象,這樣,當按下鍵盤的按鍵esc當你menu item點擊打開相同的內部框架當前顯示JInternalFrame最小的DesktopPane。現在,檢查一下,JInternalFrametitle中存在的那HashMapkey。如果存在,則檢索該keyvalue,並通過JInternalFrame變量引用它,然後在DesktopPane上恢復相同的值。如果在HashMap中不存在相應的title條目,則創建一個新的JInternalFrame對象,在HasMap中爲其輸入相同的內容並顯示它。

注:無論我已經張貼在這裏是哪裏 你可以有許多種JInternalFrame每個都具有獨特的 不同functionality局勢的解決方案,並希望只保留一個的每個 instance那些JInternalFrame

+0

http://docs.oracle.com/javase/tutorial/uiswing/events/internalframelistener.html這是有用的.. – pixylife 2013-03-17 13:32:04

+0

@luzifer:是的。我已經過去了..你可以隱藏或最小化'JInternalFrame'取決於你的需要..我在這裏發佈的是解決方案,你可以有多種類型的'JInternalFrame',每種具有不同的功能,並且你只想保留每個'JInternalFrame'的一個實例.. – 2013-03-17 13:38:02

+0

非常感謝你。 .. – pixylife 2013-03-17 14:02:35

2

以下是可能的示例代碼。希望這個幫助。 菜單操作調用其中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; 
1

試試這個簡單的代碼,這裏面:

YourJinternalFrame nw = new YourJinternalFrame(); 

private void YourJinternalFrameMenuItemActionPerformed(java.awt.event.ActionEvent evt) {             
    if(!nw.isVisible()){ 
     YourJDesktopPane.add(nw); 
     nw.setVisible(true); 
    } 

} 
0

試試這個簡單的代碼 起飛類變量CHK並設置等於0 然後調用的JFrame方法 componentremoved 在這個集合中再次chk = 0 ,如果你打電話給你的內部框架設置 CHK = 1 和調用內部比較CHK wheather它是零個或不 多數民衆贊成