2012-11-03 56 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中,您还可以放置字段,标签,按钮,复选框,甚至图像以及其他许多功能。它只是一个可以放置视觉和控制的区域。