I found one example in
which buttons are added to panels (instances of JPanel
) then
panels are added to the the containers (instances generated by
getContentPane()
) and then containers are, by the construction,
included into the JFrame
(the
windows).
I tried two things:
I got rid of the
containers. In more details, I added buttons to a panel (instance of
JPanel
) and then I added the panel to the windows (instance of
JFrame
). It worked
fine.I got rid of the panels. In more
details, I added buttons directly to the container and then I added the container to the
window (instance of
JFrame
).
So,
I do not understand two
things.
Why do we
have two competing mechanism to do the same
things?What is the reason to use
containers in combination with the panels (JPanel
)? (For
example, what for we include buttons in JPanels and then we include JPanels in the
Containers). Can we includeJPanel
in
JPanel
? Can we include a container in
container?
ADDED:
Maybe
essence of my question can be put into one line of
code:
frame.getContentPane().add(panel);
What
for we put getContentPane()
in between? I tried just
frame.add(panel);
and it works
fine.
ADDED
2:
I would like to add some code
to be more clear about what I mean. In this example I use only
JPane:
import
java.awt.*;
import javax.swing.*;
public class HelloWorldSwing
{
public static void main(String[] args) {
JFrame frame = new
JFrame("HelloWorldSwing");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(new JButton("W"),
BorderLayout.NORTH);
panel.add(new JButton("E"),
BorderLayout.SOUTH);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
And in
this example I use only Content
Pane:
import
java.awt.*;
import javax.swing.*;
public class
HelloWorldSwing {
public static void main(String[] args) {
JFrame
frame = new JFrame("HelloWorldSwing");
Container pane =
frame.getContentPane();
pane.setLayout(new BorderLayout());
pane.add(new JButton("W"), BorderLayout.NORTH);
pane.add(new JButton("E"),
BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Both
work fine! I just want to know if between these two ways to do things one is better
(safer).
No comments:
Post a Comment