2012-11-03 90 views
29

我正在學習Java gui。我學會創建一個窗口的方式是繼承或擴展JFrame類,並且它很好用,因爲JFrame包含窗口的所有屬性。現在,如果我想添加一些東西到這個窗口,我需要使用add()方法。但是今天我遇到了JPanel這也創建了一個窗口,我們可以通過jpanelObjec.add()添加東西。JPanel vs Java中的JFrame

這兩種方法有什麼區別?他們有某種相關性嗎?

+0

類似的問題:http://stackoverflow.com/questions/3497889/difference-between-jpanel-jframe-jcomponent-and-japplet –

回答

56

你不應該不必要地延長JFrame類(僅當您添加額外的功能到JFrame類)

的JFrame

JFrame延伸ComponentContainer

它是一個頂級容器,用於表示窗口的最低要求。這包括Border S,可調整大小(是JFrame可調整大小?),標題欄,控制和事件處理程序的各種Event就像windowClosewindowOpened

的JPanel(最小化/最大化允許?):

JPanel延伸ComponentContainerJComponent

它是用來將一個通用類其他Componentš在一起。

  • 當與LayoutManager一起工作時, GridLayout f.i將組件添加到不同的JPanel,然後將其添加到JFrame以創建gui。根據Layout和可重用性,它將更易於管理。

  • 這對於在Swing中繪畫/繪畫時也很有用,您可以覆蓋paintComponent(..),當然還可以享受雙倍緩衝的全部樂趣。

擺動GUI可以不存在沒有像(JWindowWindowJFrameFrameApplet)頂層容器,雖然它可以在不JPanel小號存在。

+3

實際上,[JFrame](http://docs.oracle.com/javase/ 7/docs/api/javax/swing/JFrame.html)不會擴展'JComponent'和'JContainer'。 – tenorsax

0

我想我們應該只應該擴展一個類,如果我們要制定更具體的超類的類。您可以幀的實例像JFrame frame= new Frame(); ,你可以添加像frame.getContentPane.add(widget) 所以對象,現在讓我們來看看在框架和JPanel的

JFrame的區別 - 它的一個窗戶,用來表示類似的東西,一些共同的東西窗戶應該有。這包括各種系統事件(如「窗口關閉」)(允許應用程序退出嗎?)的邊框(可調整大小的y/n?),標題欄(應用程序名稱或其他消息),控件(最小化/最大化允許?)。 JFrame是一個常用於獨立應用程序的窗口,如警告窗口或通知窗口,通常會在屏幕上彈出。它使用一個windows偵聽器的方法,只要你關閉,打開,最大化,最小化或激活一個窗口,它就會執行。

JPanel - JPanel實際上用作通用容器。這是通常放置更復雜或更大的操作的地方。您可以在一個面板中放置許多操作。 JPanel是JComponent的一個子類,JComponent是Container的一個子類,因此JPanel也是一個容器。有許多方法可用於JPanel,它從它的超類繼承。可訪問性,路線和圖像觀察者是它的一些例子。在JPanel中,您還可以放置字段,標籤,按鈕,複選框,甚至圖像以及其他許多功能。它只是一個可以放置視覺和控制的區域。