流布局管理器
流(FlowLayout)布局管理器是最基本的布局管理器,在整个容器中的布局正如其名,像”流”一样从左到右摆放组件,直到占据这一行的所有空间,然后再向下移动一行。
常用的构造方法:
(1) pubic FlowLayout();
(2) Public FlowLayout(int alignment);
(3) Public FlowLayout(int alignment,int horizGap,int vertGap);
构造方法中的alignment参数表示使用布局管理器后组件在每一行的具体摆放位置。它可以被赋以下3个值
FlowLayout.LEFT=0;//每组组件按照左对齐方式
FlowLayout.CENTER=1;
FlowLayout.RIGHT = 2;//右对齐方式
上述三个值分别代表容器使用流布局管理器后组件在每一行中的摆放位置
在public FlowLayout(int alinment,int horizGap,int vertGap)构造方法中还存在horizGap与vertGap两个参数,这两个参数分别以像素为单位指定组件之间的水平间隔和垂直间隔
案例:
public class FlowLayoutPosition extends JFrame {
public FlowLayoutPosition(){
setTitle("流布局管理器");//窗体名
Container container = getContentPane();//创建容器
//设置窗体使用流布局管理器,使组件右对齐,并设置组件之间的水平距离和竖直距离
setLayout(new FlowLayout(2,10,10));
for (int i = 0; i<10;i++){//在容器里循环添加10个按钮
container.add(new JButton("button"+1));//将按钮添加到容器里
}
setSize(300,200);//设置按钮宽高
setVisible(true);//使窗体可见
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//关闭窗体
}
public static void main(String[] args) {
new FlowLayoutPosition();
}
}
结果:
边界布局管理器
在默认不指定窗体布局的情况下。Swing组建的布局模式是边界(BorderLayout)布局管理器。边界布局管理器将容器分为了东西南北中五个区域,可以将部件加入到这五个区域中。容器调用Container类的add()方法添加组件时可以设置此组建的边界布局管理器中的区域,区域的控制可以由BorderLayout类中的成员变量来约定。
BorderLayout累的主要成员变量
成员变量 |
含义 |
BorderLayout.NORTH |
在容器中添加组件,组件置于顶端 |
BorderLayout.SOUTH |
置于低端 |
BorderLayout.WEST |
置于左端 |
BorderLayout.EAST |
置于右端 |
BorderLayout.CENTER |
置于中间开始填充,直到与其他组件边界连接 |
案例:
public class BorderLayoutPosition extends JFrame {
//定义组件摆放的位置的数组
String[]border = {BorderLayout.CENTER,BorderLayout.WEST,BorderLayout.EAST,
BorderLayout.NORTH,BorderLayout.SOUTH
};
String[] buttonName={
"center button","north button","east button",
"south button","west button"
};
public BorderLayoutPosition(){
setTitle("窗体布局管理器");
Container container = getContentPane();
setLayout(new BorderLayout());//设置容器为布局管理器
for (int i = 0;i<border.length;i++){
container.add(border[i], new JButton(buttonName[i]));
}
setSize(500,300);
setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public static void main(String[] args) {
new BorderLayoutPosition();
}
}
结果:
网格布局管理器
网格(GridLayout)布局管理器将容器划分为网格,组件可以按行和列进行排序,在网格布局管理器中,每一个组件的大小都相同,并且网格中空格的个数有网格的行数和列数决定。组件从网格的左上角开始,按照从左到右,从上到下的顺序加入网格中,且每一个组件都会填满整个网格,改变窗体的大小,组件的大小也会随之改变。
网格布局管理器常用的两个构造方法
Public GridLayout(int rows,int columns);
Public GridLayout(int rows,int columns,int horizGap,int vertGap);
rows与columns参数代表网格的行数和列数,两个参数中有一个能为零,代表一行或一列可以排列人一多个组件;参数horizGap与vertGap制定网格之间的距离,其中horizGap参数指定网格之间的水平间距,vertGap参数指定王哥之间的垂直距离。
案例:
public class GridLayoutPosition extends JFrame {
public GridLayoutPosition(){
Container container = getContentPane();
setLayout(new GridLayout(7,3,5,5));
for (int i=0;i<20;i++){
container.add(new JButton("button"+i));
}
setSize(500,500);
setTitle("网格布局管理器");
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new GridLayoutPosition();
}
}
结果:
常用面板
1. Jpanel面板
JPanel面板可以聚集一些组件来布局。首先明确它是面板也是一种容器因为它继承java.awt.Container类。
案例:
public class JPanelTest extends JFrame {
public JPanelTest(){
Container container = getContentPane();
container.setLayout(new GridLayout(2,1,10,10));
JPanel panel = new JPanel(new GridLayout(1,3,10,10));
JPanel panel2=new JPanel(new GridLayout(1,2,10,10));
JPanel panel3 = new JPanel(new GridLayout(1,2,10,10));
panel.add(new JButton("1"));
panel2.add(new JButton("2"));
panel3.add(new JButton("3"));
container.add(panel);
container.add(panel2);
container.add(panel3);
setTitle("JPanel面板");
setSize(500,300);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JPanelTest();
}
}
结果:
JScrollPane面板
JScrollPane面板时代滚动条的面板,也是一种容器,但是JScrollPane只能放置一个组件,并且不可以使用布局管理器。如果需要在JScrollPane面板放置多个组件,需要将多个组件放置在JPane面板上,然后将JPane面板作为一个整体组件添加到JScrollPane组件上。
案例:
public class JScrollPaneTest extends JFrame {
public JScrollPaneTest(){
Container container = getContentPane();//创建容器
JTextArea jTextArea = new JTextArea(20,50);//创建文本区域组件
JScrollPane jScrollPane = new JScrollPane(jTextArea);//创建ScrollPane面板对象
container.add(jScrollPane);//该面板添加到给容器里
setTitle("JScrollPane面板");
setSize(200,200);
setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public static void main(String[] args) {
new JScrollPaneTest();
}
}
结果:
按钮组件
提交按钮组件:
Swing中的提交按钮(JButton)由JButton对象表示,主要构造方法如下:
Public JButton()
Public JButton(String text)
Public JButton(Icon icon)
Public JButton(String text,Icon icon)
通过以上构造方法可以实现显示标签,显示图标,
案例:
public class JButtonTest extends JFrame {
public JButtonTest(){
Icon icon = new ImageIcon("imageButton.jpg");
setLayout(new GridLayout(3,2,5,5));
Container container = getContentPane();
for (int i= 0;i<5;i++){
//创建按钮,同时设置按钮文字与图标
JButton j =new JButton("button"+i,icon);
container.add(j);
if (i%2==0){
j.setEnabled(false);
}
}
JButton jButton = new JButton();
jButton.setMaximumSize(new Dimension(90,30));
jButton.setIcon(icon);
jButton.setHideActionText(true);
jButton.setToolTipText("图签按钮");
jButton.setBorderPainted(false);
jButton.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showConfirmDialog(null,"弹出对话框");
}
});
container.add(jButton);
setTitle("提交按钮");
setSize(500,300);
setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public static void main(String[] args) {
new JButtonTest();
}
}
结果:
单选按钮组件
单选按钮是Swing组件中JRadioButton类的对象,该类是JToggleButton的子类。而JToggleButton类又是AbstractButton类的子类所以控制单选按钮的诸多方法都是AbstractButton类中的方法。
单选按钮:
使用JradioButton类中的构造方法创建单选按钮对象。常用的构造方法如下:
public JRadioButton()
Public JRadioButton(Icon icon)
Public JRadioButton(Icon icon,boolean selected)
Public JRadioButton(String text)
Public JRadioButton(String text,Icon icon)
Public JradioButton(String text,Icon icon, boolean selected)
按钮组:
在Swing中存在一个ButtonGroup类,用于创建按钮组,如果希望将所有的单选按钮放置在按钮组中,需要实例化一个ReadioButton对象,并使用该对象调用add()方法添加按钮。
复选框按钮:
复选框(JCheckBox)可以进行多选设置,复选框使用JCheckBox类的对象表示,它同样继承AbstractButton类,所以复选框组件的属性设置也来源于AbstractButton类。
常用的构造方法:
public JCheckBox()
Public JCheckBox(Icon icon, Boolean checked)
Public JCheckBox(String text, Boolean checked)
案例:
public class CheckBoxTest extends JFrame{
private JPanel panel1 = new JPanel();
private JPanel panel2 = new JPanel();
private JTextArea jTextArea = new JTextArea(3,10);
private JCheckBox jCheckBox1= new JCheckBox("1");
private JCheckBox jCheckBox2 = new JCheckBox("2");
private JCheckBox jCheckBox3 = new JCheckBox("3");
public CheckBoxTest(){
Container container = getContentPane();
setSize(200,160);
setVisible(true);
setTitle("复选框的使用");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
container.setLayout(new BorderLayout());
container.add(panel1,BorderLayout.NORTH);
final JScrollPane jScrollPane = new JScrollPane(jTextArea);
panel1.add(jScrollPane);
container.add(panel2,BorderLayout.SOUTH);
panel2.add(jCheckBox1);
jCheckBox1.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (jCheckBox1.isSelected())
jTextArea.append("复选框1被选中\n");
}
});
panel2.add(jCheckBox2);
jCheckBox2.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (jCheckBox2.isSelected())
jTextArea.append("复选框2被选中\n");
}
});
panel2.add(jCheckBox3);
jCheckBox3.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (jCheckBox3.isSelected())
jTextArea.append("复选框1被选中\n");
}
});
}
public static void main(String[] args) {
new CheckBoxTest();
}
}
结果: