- 新建窗口
import java.awt.*;
import javax.swing.*;
class MyBorderLayout{
MyBorderLayout(){
JFrame f=new JFrame();
f.setSize(500,500);
f.setVisible(true);
}
}
public class Demo{
public static void main(String []arg) {
new MyBorderLayout();
}
这段代码新建了一个窗口
作为对比,来看一下这个代码:
import java.awt.*;
import javax.swing.*;
class MyBorderLayout extends JFrame{
MyBorderLayout(){
this.setSize(500,500);
this.setVisible(true);
}
}
public class Demo{
public static void main(String []arg) {
new MyBorderLayout();
}
}
运行之后,可以发现两个代码的产生的结果是完全一样的。
教材上所给的代码,都是第二种类型的。这种类型的代码,继承了JFrame类,而JFrame中含有JFrame的构造函数,因此MyBorderLayout类中也含有这个构造函数,我在主方法中新建一个MyBorderLayout类(不要吐槽这个名字,这个名字与现在的内容无关)时候,也同时新建了一个JFrame对象。
而在第一种类型代码中,我没有继承任何类,而是在构造方法中新建了一个JFrame对象,然后对其手动设置进行配置。
这说明,建立GUI程序并不一定要使用继承的方法,可以自己根据实际情况进行操作。
- JPanel与BorderLayout
【例】
写代码新建如下窗口:
【解】
import java.awt.*;
import javax.swing.*;
class MyBorderLayout extends JFrame{
MyBorderLayout(){
//初始化部件
JPanel jp1=new JPanel();
JPanel jp2=new JPanel(); //JPanel构造函数不能指定JPanel名字
JButton jb1=new JButton("红魔馆"); //JButton的构造函数可以指定JButton名字
JButton jb2=new JButton("万事屋");
JButton jb3=new JButton("光坂小镇");
JButton jb4=new JButton("雾之湖");
//将jb放在jp中
jp1.add(jb1);
jp2.add(jb2);
jp2.add(jb3);
//将jp放在JFrame中
this.add(jp1,BorderLayout.NORTH); //是把jpanel放在布局的北边与南边而非jbutton
this.add(jp2,BorderLayout.SOUTH);
this.add(jb4,BorderLayout.CENTER);
//配置
this.setTitle("边界布局格式");
this.setSize(500,300);
this.setVisible(true);
}
}
这段程序需要注意以下几点:
1.对于JFrame和JWindow这样的顶层框架来说,默认的布局管理器是边界布局(BorderLayout);JPanel默认的布局管理器为FlowLayout。将jp放入JFrame中,使用public void add(Component comp, Object constraints)方法(java.awt.Container中)。
2.虽然JFrame默认布局是BorderLayout,但是在对JFrame用public void add(Component comp, Object constraints)进行布局时,并非只能用BorderLayout的参数,比如我将jp1放入时采用FlowLayout.LEFT。
这样也是可以的,只不过界面设计得会比较奇怪。
- GridLayout
【例】新建如下窗口:
【解】
import java.awt.*;
import javax.swing.*;
/*
表格布局管理器(GridLayout)
注意的事项: 如果表格数量不够使用时,默认会多加一列。
GridLayout(4,1,5,10)
前面两个参数(4,1)是指网格的行、列数
后面两个参数(5,10)是指组件的水平、垂直间隔
(一个组件占一个网格)
方法:
int getRows()
获取此布局中的行数。 默认值是1
int getColumns()
获取此布局中的列数。 默认值是1
int getHgap()
获取组件之间的水平间距。 默认值是0
int getVgap()
获取组件之间的垂直间距。默认值是0
设置
void setRows(int rows)
将此布局中的行数设置为指定值。默认值是1
void setColumns(int cols)
将此布局中的列数设置为指定值。 默认值是1
void setHgap(int hgap)
将组件之间的水平间距设置为指定值。 默认值是0
*/
public class Demo {
public static void main(String[] args) throws Exception {
JFrame jFrame = new JFrame();
JPanel jp=new JPanel();
jp.setLayout(new GridLayout(4,4,5,5));
for(int i=0;i<16;i++){
jp.add(new JButton(i+"")); //不断添加comp,会自动把他们排列成GridLayout布局
}
jFrame.add(jp);
jFrame.setSize(1000,1000);
jFrame.setLocation(100, 100);
jFrame.pack();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
}
}