在图形用户界面编程中,如果只是普通的组件布局,可以用前面的三种布局管理器就可以解决,但是在比较复杂的布局要求时,就需要使用布局管理器的组合使用。
JPanel是面板组件,非顶层容器。
一个界面只能有一个JFrame窗体组件,但是可以有多个JPanel面板组件,而JPanel上也可以使用FlowLayout、BorderLayout、GridLayout等各种布局效果,这样可以组合使用达到较为复杂的布局效果。
package test;
import java.awt.*;
import javax.swing.*;
import javax.swing.*;
public class MyClass extends JFrame{
//定义组件
JButton jb1,jb2,jb3,jb4,jb5,jb6;
JPanel jp1,jp2;
public static void main(String[] args) {
MyClass myclass = new MyClass();
}
public MyClass(){
//创建组件
jb1 = new JButton("1");
jb2 = new JButton("2");
jb3 = new JButton("3");
jb4 = new JButton("4");
jb5 = new JButton("5");
jb6 = new JButton("6");
jp1 = new JPanel();
jp2 = new JPanel();
//添加组件
jp1.add(jb1);
jp1.add(jb2);
jp2.add(jb3);
jp2.add(jb4);
jp2.add(jb5);
this.add(jp1,BorderLayout.NORTH);
this.add(jp2,BorderLayout.SOUTH);
this.add(jb6,BorderLayout.CENTER);
this.setTitle("网格布局演示");
this.setSize(300,200);
this.setLocation(200, 100);
this.setResizable(false);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
package test;
import java.awt.*;
import javax.swing.*;
import javax.swing.*;
public class MyClass extends JFrame{
//定义组件
JButton jb1,jb2;
JPanel jp1,jp2,jp3;
JTextField jt;
JPasswordField jpwd;
JLabel jl1,jl2;
public static void main(String[] args) {
MyClass myclass = new MyClass();
}
public MyClass(){
//创建组件
jb1 = new JButton("确认");
jb2 = new JButton("取消");
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jt = new JTextField(10);//这里设置宽度
jpwd = new JPasswordField(10);
jl1 = new JLabel("用户名");
jl2 = new JLabel("密 码");
this.setLayout(new GridLayout(3,1));
//添加组件
jp1.add(jl1);
jp1.add(jt);
jp2.add(jl2);
jp2.add(jpwd);
jp3.add(jb1);
jp3.add(jb2);
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.setTitle("用户登陆界面");
this.setSize(300,160);
this.setLocation(200, 100);
this.setResizable(false);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
package test;
import java.awt.*;
import javax.swing.*;
import javax.swing.*;
public class MyClass extends JFrame{
//定义组件
JButton jb1,jb2;
JPanel jp1,jp2,jp3,jp4,jp5;
JLabel jl1,jl2,jl3,jl4;
JCheckBox jcb1,jcb2,jcb3;
JRadioButton jrb1,jrb2;
ButtonGroup bg;
JComboBox jcb;
JList jlist;
JScrollPane jsp;
public static void main(String[] args) {
MyClass myclass = new MyClass();
}
public MyClass(){
//创建组件
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jp4 = new JPanel();
jp5 = new JPanel();
jl1 = new JLabel("你喜欢的运动");
jl2 = new JLabel("性别");
jl3 = new JLabel("籍贯");
jl4 = new JLabel("喜欢的明星");
jcb1 = new JCheckBox("足球");
jcb2 = new JCheckBox("篮球");
jcb3 = new JCheckBox("网球");
jrb1 = new JRadioButton("男");
jrb2 = new JRadioButton("女");
bg = new ButtonGroup();
bg.add(jrb1);
bg.add(jrb2);
String []jg = {"北京","上海","山东"};
jcb = new JComboBox(jg);
String []dd = {"Jay","JJ","蔡依林","陈","那英","周杰伦呢","赵四","赵本山"};
jlist = new JList(dd);
jlist.setVisibleRowCount(3);
jsp = new JScrollPane(jlist);
jb1 = new JButton("注册用户");
jb2 = new JButton("取消注册");
//设置布局
this.setLayout(new GridLayout(5,1));
//添加组件
jp1.add(jl1);
jp1.add(jcb1);
jp1.add(jcb2);
jp1.add(jcb3);
jp2.add(jl2);
jp2.add(jrb1);
jp2.add(jrb2);
jp3.add(jl3);
jp3.add(jcb);
jp4.add(jl4);
jp4.add(jsp);
jp5.add(jb1);
jp5.add(jb2);
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.add(jp4);
this.add(jp5);
this.setTitle("单选框和复选框");
this.setSize(400,300);
this.setLocation(200, 100);
this.setResizable(false);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}