FlowLayout是一种最简单的布局管理器。
FlowLayout有三个参数,用来调整容器中的组件排列;
组件的对齐策略:默认情况下从左到右地排列,多余的空间会剩余在两边,也就是居中对齐,FlowLayout类中是使用int值表示对齐策略的。居中对应的就是FlowLayout.CENTER。
组件水平间距:也就是同一行中组件之间的间距
组件垂直间距:两行之间组件的间距,单位是像素
package com.javaeasy.learncomponent;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Point;
import java.awt.FlowLayout;
import javax.swing.JButton;
public class LearnBorderLayout {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame =new JFrame();
frame.setSize(600,250);
frame.setLocation(new Point(250,300));
frame.setTitle("学习Swing的布局管理器");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container =frame.getContentPane();
BorderLayout layout=new BorderLayout();
container.setLayout(layout);
JButton btn1=new JButton("east");
JButton btn2=new JButton("south");
JButton btn3=new JButton("west");
JButton btn4=new JButton("north");
JButton btn5=new JButton("Mid");
container.add(btn1,BorderLayout.EAST);
container.add(btn2,BorderLayout.WEST);
container.add(btn3,BorderLayout.SOUTH);
container.add(btn4,BorderLayout.NORTH);
container.add(btn5,BorderLayout.CENTER);
frame.setVisible(true);
}
}
平均分割之----GridLayout
他的作用是将容器分割成大小相等的单元格。每个添加进去的组件都将占用其中的一个单元格,如果有剩余,那么也不会被占用。
package com.javaeasy.learncomponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Point;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
public class ShowLayoutComponent {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame =new JFrame();
JMenuBar menuBar =new JMenuBar();
frame.setJMenuBar(menuBar);
menuBar.add(new JMenu("这是菜单"));
menuBar.add(new JMenu("这是菜单"));
menuBar.add(new JMenu("这是菜单"));
frame.setSize(600,250);
frame.setTitle("这是一个窗口");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container =frame.getContentPane();
container.setLayout(new GridLayout(3,2));
container.add(new JLabel("这是一个文本框,用户可以用它输入文字"));
container.add(new JComboBox(new Object[] {"这是一个组合框,可以用来下拉并选择其中的条目","adsad a"}));
container.add(new JButton("这是一个按钮,用户可以单击按钮"));
frame.setVisible(true);
}
}
最强大的布局管理者---GridBagLayout
它也是将容器以单元格格式划分,但它更加灵活
它会将容器划分为一个个单元格,单元格的大小取决于其中放置的组件等各种因素。但需要动态计算单元格的数量
gridx:放置组件起始单元格的横坐标
gridy:放置组件起始单元格的纵坐标
gridwidth:当前组件横向占用的单元格数
gridheigh:当前组件纵向占用的单元格数
fill;其属性值为:NONE,HORIZONTAL,VERTICAL,BOTH.其默认值为NONE,代表组件保持自己最佳的长和宽。如果值为HORIZONTAL,组件将放弃自己原有的长度,尽力满足组件所在的单元格的长度,如果值为VERTICAL,组件将放弃自己原有的高度,尽力去满足单元格高度,如果组件是BOTH,组件将放弃自己的长和宽,尽全力去满足单元格
weightx:到容器大小改变时,组件将所占用的水平区域的比重
weighty:到容器大小改变时,组件所占用的垂直区域的比重
package com.javaeasy.learncomponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Color;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Point;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Panel;
import javax.swing.JButton;
import javax.swing.JComboBox;
public class LearnGridBagLayout {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame =new JFrame();
frame.setSize(300,300);
frame.setLocation(new Point(100,300));
frame.setTitle("学习Swing布局管理器");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container =frame.getContentPane();
GridBagLayout layout =new GridBagLayout();
container.setLayout(layout);
GridBagConstraints gbc =new GridBagConstraints();
JButton btn1=new JButton("按钮一");
JButton btn2=new JButton("按钮二");
JButton btn3=new JButton("按钮三");
Panel panel = new Panel();
panel.setBackground(Color.ORANGE);
JPanel pane12 =new JPanel();
pane12.setBackground(Color.BLUE);
gbc.gridx=0;
gbc.gridy=0;
gbc.gridwidth=1;
gbc.gridheight=1;
gbc.fill=GridBagConstraints.NONE;
container.add(btn1,gbc);
gbc.gridx=1;
container.add(panel,gbc);
gbc.gridx=0;
gbc.gridy=1;
gbc.gridwidth=2;
gbc.fill=GridBagConstraints.BOTH;
gbc.weightx=1.0;
gbc.weighty=0;
container.add(btn2,gbc);
gbc.gridx=2;
gbc.gridy=0;
gbc.gridwidth=1;
gbc.gridheight=2;
gbc.fill=GridBagConstraints.BOTH;
gbc.weightx=0;
gbc.weighty=0;
container.add(btn3,gbc);
gbc.gridx=0;
gbc.gridy=2;
gbc.gridwidth=3;
gbc.gridheight=1;
gbc.fill=GridBagConstraints.BOTH;
gbc.weightx=1.0;
gbc.weighty=1.0;
container.add(pane12,gbc);
frame.setVisible(true);
}
}