问题
I am learning Java gui. The way I learnt to create a window is to inherit or Extend JFrame
class and it is good to use it, as JFrame
contains all the properties of a Window. Now If I want to add something to this window, I need to use add()
method. But Today I came across JPanel
which also creates a windows and we can add stuff by jpanelObjec.add()
.
What is the difference between the two methods? Are they somehow related?
回答1:
You should not extend the JFrame
class unnecessarily (only if you are adding extra functionality to the JFrame
class)
JFrame:
JFrame
extends Component
and Container
.
It is a top level container used to represent the minimum requirements for a window. This includes Border
s, resizability (is the JFrame
resizeable?), title bar, controls (minimize/maximize allowed?), and event handlers for various Event
s like windowClose
, windowOpened
etc.
JPanel:
JPanel
extends Component
, Container
and JComponent
It is a generic class used to group other Component
s together.
It is useful when working with
LayoutManager
s e.g.GridLayout
f.i adding components to differentJPanel
s which will then be added to theJFrame
to create the gui. It will be more manageable in terms ofLayout
and re-usability.It is also useful for when painting/drawing in Swing, you would override
paintComponent(..)
and of course have the full joys of double buffering.
A Swing GUI cannot exist without a top level container like (JWindow
, Window
, JFrame
Frame
or Applet
), while it may exist without JPanel
s.
回答2:
JFrame
is the window; it can have one or more JPanel
instances inside it. JPanel
is not the window.
You need a Swing tutorial:
http://docs.oracle.com/javase/tutorial/uiswing/
来源:https://stackoverflow.com/questions/13212431/jpanel-vs-jframe-in-java