上一篇讲解了Jframe顶层容器,例子中生成了一个空的窗体,在实际编程过程中,一般很少将文本框、按钮等组件直接放在顶层容器中进行布局,大多数时候是通过布局管理器结合中间容器对组件进行布局设置。
1、 将组件添加到JFrame中
方式之一:
frame.getContentPane().add(childComponent)
用getContentPane()方法获得JFrame的内容面板,再对其加入组件,一般只使用该方式添加组件。
方式之二:
把组件添加到Jpanel之类的中间容器中,用setContentPane()方法把该容器置为JFrame的内容面板:
Jpanel contentPane=new Jpanel( );
……//把其它组件添加到Jpanel中;
frame.setContentPane(contentPane);
注意:用setContentPane()方法不允许设置窗体布局,其只显示最后添加的组件,且该组件将布满整个窗口,而不管原先组件的大小设置,相当于只允许添加一次组件作为JFrame的内容面板。所以一般不实用该方法进行添加组件(可能是我不知道吧)。
2、 JPanel的使用
JPanel是Java图形化界面中最常使用的容器。
实例1:在窗体中添加一个蓝色的面板
// PanelDemo.java import javax.swing.*; import java.awt.*; //引入AWT包,因为要使用到颜色类 class PanelDemo { public static void main(String[] args) throws Exception {
JFrame f = new JFrame("第一个Java窗口"); f.setSize(300, 200); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); f.setResizable(false); f.setLocationRelativeTo(null); f.setLayout(null); // 设置窗体布局为空布局 JPanel p = new JPanel(); // 实例化一个面板 // 设置面板背景色为蓝色,如果不引入AWT包,程序将出错,可以试试看 p.setBackground(Color.BLUE); p.setSize(100, 100); // 设置面板对象大小 f.getContentPane().add(p); // 将面板添加到窗体中 // 如果使用下面添加面板的方法,面板将布满整个窗口,可以试试看 // f. setContentPane(p); } }
中间容器可以嵌套中间容器
实例2:面板的嵌套
import java.awt.*; import javax.swing.*; class TwoPanel extends JFrame { public TwoPanel(String title) { super(title); } public static void main(String args[]) { TwoPanel fr = new TwoPanel("Two Panel测试"); JPanel pan1 = new JPanel(); JPanel pan2 = new JPanel(); fr.setLayout(null); fr.getContentPane().setBackground(Color.green); // 设置窗口的颜色 fr.setSize(250, 250); pan1.setLayout(null); // 设置面板为空布局 pan1.setBackground(Color.red); pan1.setSize(150, 150); pan2.setBackground(Color.yellow); pan2.setSize(50, 50); pan1.add(pan2); // 将面板pan2添加到pan1中 // 将pan1添加到窗体中,因为pan2被添加到pan1中,所以pan1、pan2都被显示在窗体中 fr.getContentPane().add(pan1); fr.setVisible(true); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }