2012-10-17 98 views
4

我有一個開源的Java Swing應用程序是這樣的: enter image description here http://i47.tinypic.com/dff4f7.jpg如何將JFrame放入Java Swing中的現有JPanel?

你可以在截圖中看到,有分爲兩個區域一個JPanel,左,右的區域。左邊區域有很多文字鏈接。當我點擊SLA標準鏈接時,它將彈出SLA標準窗口。彈出窗口是JFrame對象。

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

的實例說明是這樣的:

(注:它是由使用圖像編輯器,這是行不通的應用程序的實際截圖編輯)

enter image description here http://i48.tinypic.com/5vrxaa.jpg

所以,我想知道有沒有辦法將JFrame放入JPanel?

我想使用JInternalFrame,有可能嗎?還是有另一種方式?

UPDATE:
源代碼:
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的子類)

+0

*「該概念與java api文檔頁面中的概念相同:http://docs.oracle.com/javase/6/docs/api。點擊左邊框中的鏈接,你會看到顯示在右邊框中的內容。「*查看[文件瀏覽器GUI](http://codereview.stackexchange.com/questions/4446)/file-browser-gui)作爲這種佈局的一個例子。 –

回答

0

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

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

5

不,你不想「把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這將允許您交換意見交換他們。

+0

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

+0

@suud:請參閱**編輯1 ** –

+0

我已經發布了源代碼(儘管只有相關的類,如果需要,我可以添加更多)。所以你建議正確的方法是獲取彈出窗口的內容,而不是在jpanel中託管彈出窗口?那麼我也不瞭解JDialog的一部分,你是否認爲使用JDialog是一種騙術,這樣JDialog看起來就像覆蓋了面板的正確區域? – null

6

而不是試圖嵌入框架,你想嵌入幀的內容。

有(至少)一個問題,我可以看到這一點。

菜單欄由框架的RootPane控制。

創建你自己一個新的JPanel。將它的佈局設置爲BorderLayout

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

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

毫無疑問,你會碰到試圖做到這一點其他無數的,專用的問題...

0

您不能將Jframe放入JPanel。相反,您應該嘗試創建一個具有像JFrame一樣功能的獨立面板,並將其嵌入到JPanel中。 由於您可以將JPanel放入另一個JPanel,但不能將JFrame放入另一個JPanel中