JAVA学习日记每天进步一点点之Swing 布局管理及面板
参考 zyj0813 的布局管理的文章
布局管理的代码思路
布局管理主要有边界布局,流布局还有网格布局,编程的思路大体相似:
- 继承JFrame类,所有的组件布局都是在JFrame窗体的基础上进行的
- 定义组件:可以在类里面,也可以在构造方法内
- 添加组件:将组件添加到JFrame容器中去,利用This函数this.add()
- 布局管理操作:可能和添加组件同时进行,或者单独设置如this.setLayout(new FlowLayout())
- 窗体设置:标题、大小、坐标、开关、可视化 具体代码如下所示: 边界布局管理
public MyBorderLayout() { JButton jb1=new JButton("按钮1"); JButton jb2=new JButton("按钮2"); JButton jb3=new JButton("按钮3"); this.add(jb1, BorderLayout.CENTER); this.add(jb2, BorderLayout.EAST); this.add(jb3, BorderLayout.SOUTH); // 窗体设置的部分 this.setTitle("边界布局管理"); this.setBounds(0, 0, 200, 200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); }
流布局管理
public MyFlowLayout() { for(int i=1;i<10;i++) { this.add(new JButton("jb"+i)); } this.setLayout(new FlowLayout(FlowLayout.LEFT));// this.setTitle("流布局管理"); this.setSize(500, 500); this.setLocation(0,0); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); }
网格布局管理:
int size = 9; JButton jb[] = new JButton[size];//定义按钮的数组 for(int i=0;i<9;i++) { jb[i]=new JButton("按钮"+i);//初始化按钮操作 } for(int i=0;i<9;i++) { this.add(jb[i]); } this.setLayout(new GridLayout(3, 3, 20, 20)); this.setTitle("网格布局管理"); this.setSize(500, 500); this.setLocation(0,0); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);
面板的代码思路
首先,面板也是一种容器,可以装一些组件来布局,但是它必须要被添加到其他的容器中去。相当于在原有的布局管理操作之后,对原来的布局用面板来细分,被用于复杂的布局管理。我们对上面的布局管理的思路做修改:
- 继承JFrame类,所有的组件布局都是在JFrame窗体的基础上进行的
- 定义组件、定义面板
- 添加组件:将组件添加到面板里,JButton
- 添加面板:将面板添加到JFrame容器中去,JPanel,相当于将面板中的组件打包成一个整体,在面板里面默认为流布局,如果改用其它的布局方式在初始化面板的时候需要加出来,如JPnel a=new JPnel(new GridLayout()),意思为面板a内部采用的是网格布局
- 布局管理操作:这里的操作是把面板当作组件来布局。
- 窗体设置:标题、大小、坐标、开关、可视化 在之前的网格布局管理里面添加面板组件,代码如下:
int size = 9; JButton jb[] = new JButton[size];//定义大小为size的按钮数组 for(int i=0;i<9;i++) { jb[i]=new JButton("按钮"+i);//初始化按钮操作 } JPanel jp1=new JPanel();//初始化面板,默认流布局 JPanel jp2=new JPanel(); JPanel jp3=new JPanel(); for(int i=0;i<3;i++) { jp1.add(jb[i]); //将按钮0-3添加到面板中 } for(int i=3;i<6;i++) { jp2.add(jb[i]); } for(int i=6;i<9;i++) { jp3.add(jb[i]); } this.add(jp1); this.add(jp2); this.add(jp3); this.setLayout(new GridLayout(1, 3, 20, 20));//对面板做网格布局管理