一、实现界面步骤
1、分2种方式:
1)继承一个顶层容器类;
2)JFrame作为类的属性。
2、在构造方法里面,设计界面
3、创建界面类
//设计界面继承JFrame类,可以直接使用它的方法和属性 public class FirstJFrame extends JFrame{ public FirstJFrame() { setVisible(true);//设置界面可见,默认false setSize(300,300);//设置行高,一般要设置 setTitle("Fist JFrame");//设置标题 getContentPane();//<span style="color:#FF0000;">获取自带的ContentPane</span> } public static void main(String[] args) { new FirstJFrame(); } }
//JFrame作为类的属性 public class secondFrame { JFrame jf; public secondFrame(){ jf=new JFrame(); jf.setVisible(true);//设置界面可见,默认false jf.setSize(300,300);//设置行高,一般要设置 jf.setTitle("Fist JFrame");//设置标题 jf.getContentPane();//获取自带的ContentPane } public static void main(String[] args) { new secondFrame(); } }
二、组件布局类
1、FlowLayout 按照水平方向或者垂直方向排放控件。用法参考代码:
public class FlowLayoutDemo extends JFrame{ JPanel jp; JButton btn1,btn2,btn3; public FlowLayoutDemo(){ setVisible(true); setSize(400,400); setTitle("文本域"); jp=new JPanel(); btn1=new JButton("新增"); btn2=new JButton("修改"); btn3=new JButton("删除"); //设置面板的布局 FlowLayout layout=new FlowLayout();//也可以在new时将对齐方式作为参数 layout.setAlignment(FlowLayout.LEFT); //设置JPanel中控件的对齐方式,FlowLayout.LEFT为左对齐 jp.setLayout(layout);//设置面板的布局方式 jp.add(btn1); jp.add(btn2); jp.add(btn3); jp.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);//<span style="color:#FF0000;">设置JPanel中控件的显示顺序,RIGHT_TO_LEFT为从右向左</span> add(jp); } public static void main(String[] args) { new FlowLayoutDemo(); } }
运行后界面:
2、BorderLayout 分为NORTH SOUTH EAST WEST CENTER五个区域,是JFrame默认布局。用法参考代码:
public class BorderLayoutDemo extends JFrame{ JPanel jp; JButton btn1,btn2,btn3,btn4,btn5; public BorderLayoutDemo(){ setVisible(true); setSize(400,400); setTitle("文本域"); jp=new JPanel(); btn1=new JButton("系统LOGO"); btn2=new JButton("联系我们"); btn3=new JButton("主页面"); btn4=new JButton("菜单链接"); btn5=new JButton("广告"); //设置布局为BorderLayout,JFrame默认流布局 jp.setLayout(new BorderLayout()); jp.add(btn1,BorderLayout.NORTH);//放在上面的区域里面 jp.add(btn2,BorderLayout.SOUTH);//放在下面的区域里面 jp.add(btn3,BorderLayout.CENTER);//放在中间的区域里面 jp.add(btn4,BorderLayout.WEST);//放在左边的区域里面 jp.add(btn5,BorderLayout.EAST); //放在右边的区域里面 add(jp); } public static void main(String[] args) { new BorderLayoutDemo(); } }
运行后界面:
3、GridLayout 按照行列进行摆放控件,无法任意摆放控件,是JPanel默认布局。也称流布局,默认从左到右按照添加的顺序依次摆放,超出行的宽度,自动换行。
用法参考代码:
public class GridLayoutDemo extends JFrame{ JPanel jp; JButton btn1,btn2,btn3,btn4,btn5; public GridLayoutDemo(){ setVisible(true); setSize(400,400); setTitle("文本域"); jp=new JPanel(); btn1=new JButton("系统LOGO"); btn2=new JButton("联系我们"); btn3=new JButton("主页面"); btn4=new JButton("菜单链接"); btn5=new JButton("广告"); //设置布局为GridLayout,JPanel默认流布局 GridLayout Layout=new GridLayout(2,3);//<span style="color:#FF0000;">实例化时可以指定行列,这样就会先按照行排列,一行排满后,再摆放下一行</span> jp.setLayout(Layout); jp.add(btn1); jp.add(btn2); jp.add(btn3); jp.add(btn4); jp.add(btn5); add(jp); } public static void main(String[] args) { new GridLayoutDemo(); } }
运行后界面:
4、GridBagLayout 按照行列进行摆放控件,可以设置摆放控件的行列。属性:gridwidth 设置控件占的列数 gridheight 设置控件占的行数。
用法参考代码:
public class GridBagLayoutDemo extends JFrame{ JPanel jp; JButton btn1,btn2,btn3,btn4,btn5; public GridBagLayoutDemo(){ setVisible(true); setSize(400,400); setTitle("文本域"); jp=new JPanel(); btn1=new JButton("btn1"); btn2=new JButton("btn2"); btn3=new JButton("btn3"); btn4=new JButton("btn4"); btn5=new JButton("btn5"); //设置布局为GridBagLayout GridBagLayout Layout=new GridBagLayout(); jp.setLayout(Layout); GridBagConstraints c=new GridBagConstraints();//指定bagLayout约束(坐标) c.gridx=5;//x代表列 c.gridy=5;//y代表行 c.fill=GridBagConstraints.HORIZONTAL;//设置控件的填充方式,HORIZONTAL为在剩下的列中全行填满 c.gridwidth=GridBagConstraints.REMAINDER;//REMAINDER指定当前的控件为最后一行或一列 jp.add(btn1,c);//添加第一行第六列 c.gridx=1; c.gridy=1; c.gridwidth=2;//指定当前控件占2列 c.gridheight=2;//指定当前控件占2行 jp.add(btn2,c);//添加第二行第二列 c.gridx=2; c.gridy=2; c.gridwidth=1; jp.add(btn3,c);//添加第三行第三列 c.gridx=3; c.gridy=2; c.gridwidth=1; jp.add(btn4,c);//添加第三行第四列 c.gridx=0; c.gridy=0; c.gridwidth=1; jp.add(btn5,c);//添加第一行第一列 add(jp); } public static void main(String[] args) { new GridBagLayoutDemo(); } }
运行后界面:
5、BoxLayout 垂直或水平摆放组件,不会因为界面大小的改变而改变控件的位置。用法参考代码:
public class BoxLayoutDemo extends JFrame{ JButton btn1,btn2,btn3,btn4,btn5; public BoxLayoutDemo(){ setVisible(true); setSize(400,400); setTitle("BoxLayout"); setDefaultCloseOperation(EXIT_ON_CLOSE);//指定界面默认关闭选项 EXIT_ON_CLOSE为关闭时退出程序 btn1=new JButton("btn1"); btn2=new JButton("btn2"); btn3=new JButton("btn3"); btn4=new JButton("btn4"); btn5=new JButton("btn5"); add(btn1); add(btn2); add(btn3); add(btn4); add(btn5); BoxLayout layout=new BoxLayout(getContentPane(),BoxLayout.Y_AXIS); //getContentPane();//JFrame获得一个面板,类似于JPanel jp //BoxLayout.Y_AXIS设置垂直摆放控件 setLayout(layout); } public static void main(String[] args) { new BoxLayoutDemo(); } }
运行后界面:
6、GroupLayout 分组布局(组:一些组件的集合):先横向分组再纵向分组,分为:
1)连续组:垂直或水平,一个接一个摆放。
2)并行组:垂直或水平,一个组件在另外一个组件的“顶部”。
GroupLayout创建步骤:
第一步:写水平方向布局:连续组sg1 包含:b1,b2,并行组pg1(b3,b4)f,方法:GroupLayout.setHorizontalGroup()
第二步:写垂直方向布局:连续组sg2 包含:pg2(b1,b2,b3),b4,方法:GroupLayout.setVerticalGroup
用法参考代码:
public class GroupLayoutDemo extends JFrame{ JButton btn1,btn2,btn3,btn4; public GroupLayoutDemo(){ setVisible(true); setSize(400,400); setTitle("BoxLayout"); setDefaultCloseOperation(EXIT_ON_CLOSE);//指定界面默认关闭选项 EXIT_ON_CLOSE为关闭时退出程序 GroupLayout layout=new GroupLayout(getContentPane()); setLayout(layout); btn1=new JButton("btn1"); btn2=new JButton("btn2"); btn3=new JButton("btn3"); btn4=new JButton("btn4"); add(btn1); add(btn2); add(btn3); add(btn4); //写水平方向布局:连续组sg1 包含:b1,b2,并行组p1(b3,b4) GroupLayout.SequentialGroup sg1=layout.createSequentialGroup();//创建连续组对象,作为水平方向的布局 sg1.addComponent(btn1);//向连续组添加组件 sg1.addComponent(btn2); //垂直方向 b3和b4组成的并行小组,pg1作为sg1的第3个元素 GroupLayout.ParallelGroup pg1=layout.createParallelGroup(); sg1.addGroup(pg1); pg1.addComponent(btn3); pg1.addComponent(btn4); layout.setHorizontalGroup(sg1);//指定水平方方向的布局sg1 //写垂直方向布局:连续组sg2 包含:pg2(b1,b2,b3),b4 GroupLayout.SequentialGroup sg2=layout.createSequentialGroup();//创建连续组对象,作为水平方向的布局 //btn1,btn2,btn3作为一个并行的分组pg2作为sg2的第一个元素 GroupLayout.ParallelGroup pg2=layout.createParallelGroup(); pg2.addComponent(btn1); pg2.addComponent(btn2); pg2.addComponent(btn3); sg2.addGroup(pg2); sg2.addComponent(btn4); layout.setVerticalGroup(sg2);//指定垂直方向的布局sg2 } public static void main(String[] args) { new GroupLayoutDemo(); } }
运行后界面:
7、自定义布局:使用setBounds(x, y, width, height);方法
1)清空父容器的布局:setLayout(null)
2)给每一个控件设置坐标、宽度、长度。
代码可参考GUI基础中的例子。
三、添加背景
1、设置一般组件背景,使用setIcon方法,用法参考代码:
public class BackgroundDemo extends JFrame{ JPanel jp; JButton btn1; public BackgroundDemo(){ setVisible(true); setSize(400,400); setTitle("背景"); jp=new JPanel(); btn1=new JButton("系统LOGO"); btn1.setIcon(new ImageIcon(".src/Images/4.bmp")); jp.add(btn1); add(jp); } public static void main(String[] args) { new BackgroundDemo(); } }
2、设置JPanel容器背景,用法参考代码:
public class JpanelBackgroudDemo extends JFrame{ MyPanel panel; JButton btn; Container c; public JpanelBackgroudDemo(){ setVisible(true); setSize(400,400); setTitle("背景"); panel=new MyPanel(new ImageIcon(".src/Images/vvjjj.jpg").getImage()); btn=new JButton("注册"); setLayout(null);//不使用任何布局 c=getContentPane(); panel.setBounds(0, 0, 400, 400); c.add(panel); panel.add(btn); } public static void main(String[] args) { new JpanelBackgroudDemo(); } } //重写容器类,比如JPanel类的PaintCoponent()方法绘制图形 class MyPanel extends JPanel{ Image img; public MyPanel(Image img){ this.img=img; this.setOpaque(true);//设置透明度 } //绘制容器 public void PaintCoponent(Graphics g) { super.paintComponent(g);//获取父类原来的绘制组件的方法 //第一个参数是要作为背景的图片,第2/3代表开始坐标,第4/5代表图片的宽度和高度 g.drawImage(img,0,0,this.getWidth(),this.getHeight(),this); } }