今天是自学Swing 的第三天
分析
布局
绝对布局
绝对布局只需要null就行,布局之后组件需要给出位置,一但想修改得改代码
package swing;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
//绝对布局的应用 组件不会随着窗体改变而改变
public class class6 extends JFrame {
public class6() {
setBounds(100,100,300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=getContentPane();
c.setLayout(null);//设置容器为绝对布局,用坐标达到控制组件的位置
JButton button1=new JButton("按钮1"),button2=new JButton("按钮2");
button1.setBounds(20, 20, 80, 50);
button2.setBounds(100, 100, 80, 50);
c.add(button1);
c.add(button2);
setVisible(true);
}
public static void main(String[] args) {
new class6();
}
}
运行如下:优势是可以放任何地方,但位置也就固定了
流布局
从左到右,默认居中对齐使用方式new FlowLayout()里面可以有参数
当窗体改变时,里面的内容组件也会跟着改变
package swing;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
//流布局 按钮
public class class7 extends JFrame{
public class7() {
setBounds(100,100,300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=getContentPane();
c.setLayout(new FlowLayout(FlowLayout.RIGHT,10,10));//设置流布局默认居中 里面有三个参数
/*1. c.setLayout(new FlowLayout(FlowLayout.LEFT));设置左对齐
* 2. 水平参数
* 3. 垂直参数
*/
for(int i=0;i<5;i++) {
JButton button=new JButton("按钮"+i);
button.setSize(80,50);
c.add(button);
}
setVisible(true);
}
public static void main(String[] args) {
new class7();
}
}
这里是右对齐且参数为10,10
边界布局
package swing;
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
//边界布局 分为东南西北中五个布局 布局位置不会改变大小会随着窗体改变
public class class8 extends JFrame {
public class8() {
setBounds(100, 100, 300, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=getContentPane();
c.setLayout(new BorderLayout());//设置容器边界布局 不必在里面设置参数
JButton button1=new JButton("东");
JButton button2=new JButton("南");
JButton button3=new JButton("西");
JButton button4=new JButton("北");
JButton button5=new JButton("中");
c.add(button1,BorderLayout.EAST);
c.add(button2,BorderLayout.SOUTH);
c.add(button3,BorderLayout.WEST);
c.add(button4,BorderLayout.NORTH);
c.add(button5,BorderLayout.CENTER);
//c.add(new JButton("覆盖"),BorderLayout.CENTER);覆盖中间的按钮
setVisible(true);
}
public static void main(String[] args) {
new class8();
}
}
网格布局
package swing;
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
//网格布局
public class class9 extends JFrame{
public class9() {
setBounds(100, 100, 500, 500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=getContentPane();
c.setLayout(new GridLayout(4, 5, 10, 10));//行 列 水平间距 垂直间距
for(int i=0;i<20;i++) {
JButton button=new JButton("按钮"+i);
button.setSize(80,60);
c.add(button);
}
setVisible(true);
}
public static void main(String[] args) {
new class9();
}
}
与流布局的区别:网格布局改变窗口内容布局还是那样,只是变大变小,忘记的可以看看我上面写的;而流布局改变窗体内容会跟着改变对齐。
网格组布局
package swing;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
//网格组布局
public class class10 extends JFrame{
public class10() {
setBounds(100, 100, 800, 800);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=getContentPane();
c.setLayout(new GridBagLayout());//创建网格组布局
JButton button1=new JButton("按钮1");
for(int i=0;i<10;i++) {
GridBagConstraints gx=new GridBagConstraints();
gx.gridx=0;
gx.gridy=i;
JButton button=new JButton("按钮"+i);
c.add(button,gx);
GridBagConstraints gy=new GridBagConstraints();
gy.gridx=i;
gy.gridy=0;
JButton buttonn=new JButton("按钮"+i);
c.add(buttonn,gy);
}
//第一个组件
GridBagConstraints g1=new GridBagConstraints();
g1.gridx=1;
g1.gridy=1;
c.add(button1,g1);//第一行第一列 记得设置网格的格式
//第二个组件
GridBagConstraints g2=new GridBagConstraints();
JButton button2=new JButton("按钮2");
g2.gridx=2;
g2.gridy=2;
g2.gridheight=2;//可以设置按钮占几行几列 根据结果图看很明显按钮占两行两列
g2.gridwidth=2;
c.add(button2,g2);
//第三个组件
GridBagConstraints g3=new GridBagConstraints();
g3.gridx=4;
g3.gridy=4;
g3.gridheight=3;
g3.gridwidth=3;
g3.fill=GridBagConstraints.BOTH;//全部填充
JButton button3=new JButton("按钮3");
c.add(button3,g3);
//fill是组件对单元格的填充布局
//anchor可以定义单元格所占组件的方位
GridBagConstraints g4=new GridBagConstraints();//单元格
g4.gridx=7;
g4.gridy=7;
g4.gridheight=2;
g4.gridwidth=2;
g4.anchor=GridBagConstraints.EAST;
JButton button4=new JButton("按钮4");
c.add(button4,g4);//将组件g4插入单元格中且为both
g4.fill=GridBagConstraints.BOTH;
g4.anchor=GridBagConstraints.CENTER;
JPanel panel =new JPanel();
panel.setBackground(Color.green);
c.add(panel,g4);
//第五个组件
//inset的使用 它是一个类 四个属性距离单元格的距离有点类似margin
GridBagConstraints g5=new GridBagConstraints();
g5.gridx=1;
g5.gridy=8;
g5.gridheight=2;
g5.gridwidth=2;
JButton button5=new JButton("按钮5");
g5.insets=new Insets(5,5,5,5);//到四个边的距离
c.add(button5,g5);
//ipadx ipady 设置组件大小
//weightx weighty表示一个单元格的最大和最小的大小 当改变窗口的时候会有很明显的效果,这里我先省略了
setVisible(true);
}
public static void main(String[] args) {
new class10();
}
}
博主心情
敲了几个小时的代码有点累了,昨天上课居然忘记签到了,果然和朋友出去吃饭就会忘记一些事情,学习和聚会只能选择一个,哈哈哈,加油把越容易得到的越不会珍惜,所以真的觉得有些朋友真的对我很好,谢谢大家了。