ContentPane和JPanel之间有什么关系?
我找到了一个例子,其中按钮被添加到面板(的实例)中,然后将面板添加到容器(生成的实例)中,然后容器通过构造包含在(窗口)中。JPanel
getContentPane()
JFrame
我尝试了两件事:
我摆脱了容器。更详细地说,我向面板添加了按钮(的实例),然后将面板添加到窗口(的实例)。它工作正常。
JPanel
JFrame
我摆脱了面板。更详细地说,我将按钮直接添加到容器中,然后将容器添加到窗口(的实例)。
JFrame
所以,我不明白两件事。
为什么我们有两个相互竞争的机制来做同样的事情?
将容器与面板()结合使用的原因是什么?(例如,我们在JPanels中包含按钮,然后在容器中包含JPanels)。我们可以包括在吗?我们可以在容器中包含容器吗?
JPanel
JPanel
JPanel
添加:
也许我的问题的本质可以放在一行代码中:
frame.getContentPane().add(panel);
我们把什么放在中间?我试过了,它工作正常。getContentPane()
frame.add(panel);
添加 2:
我想添加一些代码,以更清楚地了解我的意思。在这个例子中,我只使用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);
}
}
在此示例中,我只使用内容窗格:
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);
}
}
两者都工作正常!我只是想知道在这两种做事方式之间,一种是否更好(更安全)。