簡體   English   中英

如何將JFrame放入Java Swing中的現有JPanel?

[英]How to put JFrame into existing JPanel in Java Swing?

我有一個像這樣的開源java swing應用程序: 在此輸入圖像描述 http://i47.tinypic.com/dff4f7.jpg

你可以在截圖中看到,有一個JPanel分為左右兩個區域。 左側區域有許多文本鏈接。 當我單擊SLA Criteria鏈接時,它將彈出SLA Criteria窗口。 彈出窗口是JFrame對象。

現在,我試圖將彈出窗口放到JPanel的右側區域,這意味着不再有彈出窗口,即當我單擊SLA Criteria鏈接時,其內容將顯示在右側區域。 JPanel的。 JPanel右側區域的現有內容將不再使用。 這個概念與java api文檔頁面中的相同: http//docs.oracle.com/javase/6/docs/api 單擊左框中的鏈接,您將獲得右框顯示的內容。

示例說明如下:

(注意:它是使用圖像編輯器制作和編輯的,這不是工作應用程序的真實截圖)

在此輸入圖像描述 http://i48.tinypic.com/5vrxaa.jpg

那么,我想知道有沒有辦法將JFrame放入JPanel?

我正在考慮使用JInternalFrame,這可能嗎? 或者還有另一種方式嗎?

更新:
源代碼:
http://pastebin.com/tiqRbWP8(VTreePanel.java ,這是左右區域划分的面板)
http://pastebin.com/330z3yuT(CPanel.java ,這是VTreePanel的超類,也是JPanel的子類)
http://pastebin.com/MkNsbtjh(AWindow.java ,這是彈出窗口)
http://pastebin.com/2rsppQeE(CFrame.java ,這是AWindow的超類,也是JFrame的子類)

您想要嵌入框架的內容,而不是嘗試嵌入框架。

我可以看到(至少)一個問題。

菜單欄由框架的RootPane

創建一個新的JPanel 將它的布局設置為BorderLayout

從框架中獲取菜單欄(使用JFrame#getJMenuBar )並添加到新面板的北部位置。

獲取幀ContentPane並將其添加到面板的中心位置。

毫無疑問,你會遇到無數其他特定於應用程序的問題,試圖做到這一點......

不,您不想“將JFrame放入JPanel”,上面的插圖也沒有證明這一點。 相反,它在另一個窗口的頂部(不在其內部)顯示一個從屬窗口。 如果您絕對需要顯示一個新的從屬窗口,我建議您創建並顯示一個JDialog。 這些教程將解釋如何執行此操作,或者如果您在代碼嘗試中遇到困難,我們將幫助您解決此問題。


編輯1
你說:

我需要從彈出窗口樣式轉換為jpanel內容樣式。 它就像java api文檔頁面樣式:docs.oracle.com/javase/6/docs/api當你單擊左框中的文本時,它不顯示任何彈出窗口,對吧? 內容直接顯示在右側框架中。 所以這基本上就是我的目標。 源代碼非常大。 如果可能,我會嘗試粘貼源代碼。

您正在尋找的是簡單地在JList或JTable中實現MouseListener,並且當響應單擊時獲取基於所做選擇的內容。 這與將JFrame放在JPanel中無關,而與編寫正確的程序邏輯有關。 再次,將它顯示在一個模態JDialog中 - 但這對於編寫正確的非GUI邏輯來說都是次要的。 你真的在這里咆哮錯誤的樹。 忘記JFrames,暫時忘掉JPanels,而是專注於點擊它時如何提取SLA Criteria數據。


編輯2
我想我看到你要做的是 - 而不是JFrames和JDialogs,使用JPanels並使用CardLayout交換它們,這將允許你交換視圖

我瀏覽了源代碼,我看到AWindow.java有內部面板(APanel.java)來保存窗口的內容,它還有一個公共方法來返回內容面板對象(getAPanel())。 有了這個,我可以用它來將窗口的內容提取到其他容器中。

最后,我決定在VTreePanel的右側區域使用JTabbedPane來顯示彈出窗口的內容。

您不能將Jframe放入JPanel。 相反,您應該嘗試創建一個具有JFrame等功能的單獨面板,並將其嵌入到JPanel中。 因為您可以將JPanel放入另一個JPanel,而不是將JFrame放入另一個JPanel

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM