Java之GUI编程(二)——布局管理器
在上篇博客Java之GUI编程(一)中我已经对GUI编程的组件和事件做了简单介绍了,现在来看看另外一部分关于组件在各个平台是如何做到仍能保持自己合理的位置大小以及外观的。
已经说了Java是跨平台运行的,但是不同的平台对于点及坐标的定义不完全相同。而且屏幕的解析度分辨率不同也会造成位置的变化,为了确保每个组件的相对位置和大小以及外观,java就设计了布局管理器。
布局管理器是对容器中的元素进行管理,按照一定的规则排放容器里面的元素。它控制了组件的摆放。
布局管理器分类:
FlowLayout:浮动布局管理器
BorderLayout:边框布局管理器
GridLayout:网格布局管理器
CardLayout:卡片布局管理器
GridBagLayout:网格包布局管理器
FlowLayout
import java.awt.*; import java.awt.event.*; public class FrameTest{ public static void main(String[] args) { //创建一个框架 Frame f=new Frame("Test"); //设置窗体大小 f.setSize(800,600); //设置窗体显示位置 f.setLocation(100,100); Button btn1=new Button("Button1"); //创建按钮对象 f.setBackground(Color.BLUE); //窗体背景色 f.setVisible(true); //窗体可见 f.setLayout(new FlowLayout());//设置浮动布局方式 Button btn2=new Button("Button2"); Button btn3=new Button("Button3"); Button btn4=new Button("Button4"); Button btn5=new Button("Button5"); f.add(btn1); f.add(btn2); f.add(btn3); f.add(btn4); f.add(btn5); } }运行结果:
图一
BorderLayout
import java.awt.*; import java.awt.event.*; public class FrameTest{ public static void main(String[] args) { //创建一个框架 Frame f=new Frame("Test"); //设置窗体大小 f.setSize(800,600); //设置窗体显示位置 f.setLocation(100,100); Button btn1=new Button("Button1"); //创建按钮对象 f.setBackground(Color.BLUE); //窗体背景色 f.setVisible(true); //窗体可见 Button btn2=new Button("Button2"); Button btn3=new Button("Button3"); Button btn4=new Button("Button4"); Button btn5=new Button("Button5"); f.add(btn1,"Center"); //将按钮添加到窗体中,并设置显示位置 f.add(btn2,"North"); f.add(btn3,"West"); f.add(btn4,"South"); f.add(btn5,"East"); } }运行结果:
GridLayout
import java.awt.*; import java.awt.event.*; public class FrameTest{ public static void main(String[] args) { //创建一个框架 Frame f=new Frame("Test"); //设置窗体大小 f.setSize(800,600); //设置窗体显示位置 f.setLocation(100,100); Button btn1=new Button("Button1"); //创建按钮对象 f.setBackground(Color.BLUE); //窗体背景色 f.setVisible(true); //窗体可见 //f.setLayout(new FlowLayout());//设置浮动布局方式 f.setLayout(new GridLayout(3,1,10,10));//设置布局方式并设置组件间间隙 Button btn2=new Button("Button2"); Button btn3=new Button("Button3"); Button btn4=new Button("Button4"); Button btn5=new Button("Button5"); f.add(btn1); f.add(btn2); f.add(btn3); f.add(btn4); f.add(btn5); } }
CardLayout
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class FrameTest { private static JPanel p; public static void main(String[] args) { JFrame f=new JFrame("CardLayout"); p=new JPanel(); //将JPanel p的LayoutManager设置为CardLayout p.setLayout(new CardLayout()); //新建两个JPanel JPanel p1=new JPanel(); JPanel p2=new JPanel(); JLabel lb=new JLabel("first panel"); p1.add(lb); lb=new JLabel("second panel"); p2.add(lb); //将新建的两个JPanel p1,p2添加到p中 p.add(p1,"frist"); p.add(p2,"second"); //设置默认显示first所对应的JPanel p1 ((CardLayout)p.getLayout()).show(p, "frist"); JButton cbtn=new JButton("Change"); cbtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { //当按下Change按钮时,显示second 对应的JPanel p2 ((CardLayout)p.getLayout()).show(p, "second"); } }); f.add(cbtn,BorderLayout.NORTH); f.add(p,BorderLayout.CENTER); f.setSize(400,150); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }运行结果:
GridBagLayout
import java.awt.GridBagLayout; import java.awt.GridBagConstraints; import java.awt.Insets; import javax.swing.JFrame; import javax.swing.JButton; public class FrameTest { public static void main(String[] args) { JFrame f=new JFrame("GridBagLayout"); f.setLayout(new GridBagLayout()); JButton btn=new JButton("Button1"); GridBagConstraints gbc=new GridBagConstraints(); //设定第一个单元格的属性值 gbc.gridx=0; //横坐标 gbc.gridy=0; //纵坐标 gbc.gridwidth=1; //组件宽 gbc.gridheight=1; //组件高 gbc.weightx=0; //行的权重,通过这个属性来决定如何分配行的剩余空间 gbc.weighty=0; gbc.anchor=GridBagConstraints.NORTHWEST; //当组件在格内而不能撑满其格时,通过fill的值来设定填充方式,有四个值 gbc.fill=GridBagConstraints.NONE; gbc.insets=new Insets(0,0,0,0); gbc.ipadx=0; //组件间的横向间距 gbc.ipady=0; //组件间的纵向间距 f.add(btn,gbc); //设定第二个单元格属性值 gbc.gridx=1; gbc.gridy=0; gbc.gridwidth=GridBagConstraints.REMAINDER; gbc.gridheight=1; gbc.weightx=1; gbc.weighty=0; // 当组件小于其显示区域时,用于确定将组件置于何处(在显示区域中) gbc.anchor=GridBagConstraints.CENTER; gbc.fill=GridBagConstraints.HORIZONTAL; gbc.insets=new Insets(5,5,5,5); //设置组件之间彼此的间距 gbc.ipadx=0; gbc.ipady=0; btn=new JButton("Button2"); f.add(btn,gbc); //设定第三个单元格属性值 gbc.gridx=0; gbc.gridy=1; gbc.gridwidth=1; gbc.gridheight=GridBagConstraints.REMAINDER; gbc.weightx=0; gbc.weighty=1; gbc.anchor=GridBagConstraints.CENTER; gbc.fill=GridBagConstraints.VERTICAL; gbc.insets=new Insets(0,0,0,0); gbc.ipadx=10; gbc.ipady=10; btn=new JButton("Button3"); f.add(btn,gbc); f.pack(); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
总结
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。