一、布局管理器概念:各组件在容器中的大小以及摆放位置。实现跨平台特性并获得动态布局的效果;Java组件布局由布局管理器对象来管理;布局管理器会确定组件打大小和位置;在容器发生变化是做出动态调整。
二、布局管理器的分类
FlowLayout:流式布局管理器
BorderLayout:边界布局管理器
GridLayout:网格布局管理器
GridBagLayout:网格组布局管理器
GardLayout:卡片布局管理器
BoxLayout:箱式布局管理器
SpringLayout:弹簧布局管理器
1、FlowLayout:流式布局管理器
组件加入容器的顺序是从左到右,容器大小改变时组件大小不改变,位置会改变
网格包布局管理器
package qwer;
import java.awt.Button;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
public class wenjuan {
public static void main(String[] args) {
JFrame jf=new JFrame();
jf.setSize(550,650);
jf.setLocation(550,100);
/**
* GridBagLayout(网格布布局):
* 允许网格中的组件大小各不相同,允许一个组件跨越一个或多个网格。
* 使用GridBagLayout的步骤:
* 1、创建GridBagLayout布局管理器,使容器采用该布局管理器:
* GridBagLayout layout=new GridBagLayout();
* jf.setLayout(layout);
* 2、创建GridBagConstraints对象(布局约束条件),并设置该对象的相关属性
* GridBagConstraints c=new GridBagConstraints();
* c.gridx=1;设置网格的左上角横向索引;
* c.gridy=;设置网格的左上角纵向索引;
* c.gridwidth=1;设置组件横向跨越网格;
* c.gridheight=1;设置组件纵向跨越网格;
* 3、调用GridBagLayout对象的setConstraints()方法建立GridBagConstraints对象和受控组件之间的联系。
* layout.setConstraints(ckb1,c);
* 4、向容器中添加组件。
* jf.add(ckb1);
*/
GridBagLayout layout=new GridBagLayout();
GridBagConstraints c=new GridBagConstraints();
jf.setLayout(layout);
/**
* fill的值:(组件填充网格方式)
* NONE:不改变组件大小
* HORIZONTAL:水平填充
* VERTICAL:垂直填充
* BOTH:水平,垂直都填充
*/
c.fill=GridBagConstraints.NONE;
c.gridwidth=GridBagConstraints.REMAINDER;
/**
* weightx,weighty:设置权重
* c.gridwidth=GridBagConstraints.REMAINDER;
* 声明当前组件为最后一个
* gridwidth=1:横向跨越1个方格
* gridheight=1:纵向跨越1个方格
* gridx,gridy:设置组件的横向,纵向索引。
*/
c.weightx=3;
c.weighty=1;
JLabel bq=new JLabel("问卷调查");
/**
* Font(字体)构造方法:
* public Font(Sring familyName,int style,int size);
* familyName:字体类型(宋体,...)
* style:字体风格(普通:Font.PLAIN;加粗:Font.BOLD;斜体:Font.ITALIC;粗斜体:Font.BOLD+Font.ITALIC)
* size:字体大小
*/
bq.setFont(new Font("华文仿宋",Font.PLAIN,30));
layout.setConstraints(bq,c);
jf.add(bq);
c.weightx=1;
c.weighty=1;
c.fill=GridBagConstraints.BOTH;
JLabel bq1=new JLabel("1、第一个多选:");
layout.setConstraints(bq1,c);
jf.add(bq1);
c.gridwidth=1;
/**
* 按钮有三类:JButton(普通按钮),JCheckBox(多选按钮),JRadioButton(单选按钮)
* Icon getIcon()和void setIcon(Icon,icon):设置或者获取按钮图标
* String getText()和void setText(String text):设置或者获取按钮文本
* void setEnable(boolean b):启用(b为true)或禁用(b为false)按钮
* boolean isSelected():返回按钮状态(trua为选中,false为未选中)
* setSelected(boolean b):设置按钮状态(b为trua选中,b为false未选中)
*/
final JCheckBox ckb1=new JCheckBox("第一个多选的第一个选项");
layout.setConstraints(ckb1,c);
jf.add(ckb1);
final JCheckBox ckb2=new JCheckBox("第一个多选的第二个选项");
layout.setConstraints(ckb2,c);
jf.add(ckb2);
c.gridwidth=GridBagConstraints.REMAINDER;
final JCheckBox ckb3=new JCheckBox("第一个多选的第三个选项");
layout.setConstraints(ckb3,c);
jf.add(ckb3);
JLabel bq2=new JLabel("2、第二个多选:");
layout.setConstraints(bq2,c);
jf.add(bq2);
c.gridwidth=1;
final JCheckBox ckb4=new JCheckBox("第二个多选的第一个选项");
layout.setConstraints(ckb4,c);
jf.add(ckb4);
final JCheckBox ckb5=new JCheckBox("第二个多选的第二个选项");
layout.setConstraints(ckb5,c);
jf.add(ckb5);
c.gridwidth=GridBagConstraints.REMAINDER;
final JCheckBox ckb6=new JCheckBox("第二个多选的第三个选项");
layout.setConstraints(ckb6,c);
jf.add(ckb6);
JLabel bq3=new JLabel("3、第一个单选:");
layout.setConstraints(bq3,c);
jf.add(bq3);
c.gridwidth=1;
/**
* ButtonGroup(单选框):
* 需要向其中添加JRadioButton(单选按钮)
* 在同一个单选框中的JRadioButton按钮只能选一个;
* 注:JRadioButton(单选按钮)需要添加两个地方:
* 第一个为ButtonGroup(单选框),添加在一个结构中
* 第二个为显示的地方,窗口或者容器
*/
ButtonGroup g1=new ButtonGroup();
final JRadioButton rdb1=new JRadioButton("第一个单选的第一个选项");
g1.add(rdb1);
layout.setConstraints(rdb1,c);
jf.add(rdb1);
final JRadioButton rdb2=new JRadioButton("第一个单选的第二个选项");
g1.add(rdb2);
layout.setConstraints(rdb2,c);
jf.add(rdb2);
c.gridwidth=GridBagConstraints.REMAINDER;
final JRadioButton rdb3=new JRadioButton("第一个单选的第三个选项");
g1.add(rdb3);
layout.setConstraints(rdb3,c);
jf.add(rdb3);
JLabel bq4=new JLabel("4、第二个单选:");
layout.setConstraints(bq4,c);
jf.add(bq4);
c.gridwidth=1;
ButtonGroup g2=new ButtonGroup();
final JRadioButton rdb4=new JRadioButton("第二个单选的第一个选项");
g2.add(rdb4);
layout.setConstraints(rdb4,c);
jf.add(rdb4);
final JRadioButton rdb5=new JRadioButton("第二个单选的第二个选项");
g2.add(rdb5);
layout.setConstraints(rdb5,c);
jf.add(rdb5);
c.gridwidth=GridBagConstraints.REMAINDER;
final JRadioButton rdb6=new JRadioButton("第二个单选的第三个选项");
g2.add(rdb6);
layout.setConstraints(rdb6,c);
jf.add(rdb6);
c.gridwidth=1;
c.weightx=1;
c.gridx=0;
c.fill=GridBagConstraints.NONE;
Button but1=new Button("提交");
layout.setConstraints(but1,c);
jf.add(but1);
c.gridx=2;
c.gridwidth=GridBagConstraints.REMAINDER;
Button but2=new Button("重置");
layout.setConstraints(but2,c);
jf.add(but2);
but1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
int i=0;
if(ckb1.isSelected())
i++;
if(ckb2.isSelected())
i++;
if(ckb3.isSelected())
i++;
if(ckb4.isSelected())
i++;
if(ckb5.isSelected())
i++;
if(ckb6.isSelected())
i++;
if(rdb1.isSelected())
i+=2;
if(rdb4.isSelected())
i+=2;
JOptionPane.showMessageDialog(null,"你的得分为"+i+"分。");
}
});
but2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
ckb1.setSelected(false);
ckb2.setSelected(false);
ckb3.setSelected(false);
ckb4.setSelected(false);
ckb5.setSelected(false);
ckb6.setSelected(false);
rdb1.setSelected(false);
rdb2.setSelected(false);
rdb3.setSelected(false);
rdb4.setSelected(false);
rdb5.setSelected(false);
rdb6.setSelected(false);
}
});
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时程序关闭;
jf.setVisible(true);
}
}