Java中的图形用户界面又组件构成,例如Button、TextField、Label等都是组件,其中一些特殊的组件称为容器,例如框架(Frame)、面板(Panel)等。容器是组件的容器,各种组件(包括容器)可以通过add()方法添加到容器中。
1.顶层容器
嵌套容器的最外层称为顶层容器。swing中提供了四种顶层容器,分别为JFrame、JApplet、JDialog和JWindow。JFrame是一个带有标题行和控制按钮(最大化/最小化/恢复/关闭)的独立窗口,创建应用程序时需要使用JFrame。创建小应用程序时需要使用JApplet,它被包含在浏览器窗口中。创建对话框使用JDialog。JWindow是一个不带有标题行和控制按钮的窗口,因此通常很少使用。
举个栗子:
public class JFrameDemo {
public static void main(String[] args){
JFrame frame = new JFrame("JFrameDemo");
JButton button = new JButton("Press me");
//将JButton放到JFrame的中央
frame.getContentPane().add(button, BorderLayout.CENTER);
frame.pack();//将Frame设置到合适的大小
frame.setVisible(true);//显示JFrame
}
}
执行结果如下:
2.内容窗格:
每个顶层容器(JFrame、JApplet、JDialog、JWindow)都有一个内容窗格(ContentPane),实际上,顶层容器除了菜单之内的组件都放在这个内容的窗格中。想要将组件放在内容窗格,可以使用两种方法:一种是通过顶层容器getContenPane()方法获得的内容窗格(getContentPane()方法返回类行为java.awt.Container,仍然为容器)然后将组件添加到内容窗格中,例如:
Container contentPane = frame.getContentPane();
contentPane.add(button, BorderLayout.CENTER);
另一种方法是创建一个新的内容窗格取代顶层容器默认的内容窗格。通常的做法是创建一个JPanel的实例,然后将组件添加到JPanel实例中,再通过顶层容器的setContentPane()方法将JPanel实例设置为新的内容窗格,例如:
JPanel contentPane = new JPanel();
contentPane.setLayout(new BorderLayout());
contentPane.add(button, BorderLayout.CENTER);
frame.setContentPane(contentPane);
3.面板
面板(JPanel)是一种用途广泛的容器,但是与顶层容器不同的是,面板不能独立存在,必须被添加到其他容器内部。面板可以嵌套,由此可以设计出复杂的图形界面。
举个栗子:
public class JFrameDemo {
public static void main(String[] args){
JFrame frame = new JFrame("Frame with panel");
Container contentPane = frame.getContentPane();
//将JFrame实例的背景设置为蓝绿色
contentPane.setBackground(Color.CYAN);
JPanel panel = new JPanel();
//将JPanel的实例的背景设置为黄色
panel.setBackground(Color.yellow);
JButton button = new JButton("Press me");
//将JButton实例添加到JPanel中
panel.add(button);
//将JPanel实例添加到JFrame的南侧
contentPane.add(panel, BorderLayout.SOUTH);
frame.setSize(300,200);
frame.setVisible(true);
}
}
运行结果如下: