java中的图形化界面程序开发过程,我们可以用画画的过程来说明:
既然要画画,肯定需要一块画板吧,java中我们使用窗口javax.swing.JFrame作为画板,来看一段程序:
package com.anjoyo.test;
import javax.swing.JFrame;
publicclass Main extends JFrame{
public Main(){
}
publicstaticvoid main(String[] args) {
new Main();
}
}
这里我们运行一个JFrame,但是很可惜,什么都没有出现。这是因为新建出来的窗口默认是不显示的,来看几个重要的方法:
JFrame中的方法:
new JFrame() -- 构造一个初始不可见的窗口
new JFrame(String) -- 构造一个初始不可见,具有指定标题的窗口
void setBounds(int x,int y,int width,int height) -- 指定窗口出现的坐标(x,y)和窗口的大小,也即窗口的宽度和高度(width,height)
void setVisible(boolean) -- 设置显示模式(窗体是否可见)
void setTitle(String) -- 如果我们初始化的是一个没有标题的窗口,可以用这个方法为窗口设置标题。
void setDefaultCloseOperation(int operation) -- 设置用户在关闭窗体时的默认操作,这里的参数我们用EXIT_ON_CLOSE,也即用System.exit的方法来tui
下面我们就使用这些方法:
package com.anjoyo.test;
import javax.swing.JFrame;
publicclass Main extends JFrame{
public Main(){
// 设置默认关闭模式
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置标题栏
setTitle("我的小窗口");
// 设置窗口区域(x,y,width,heigth)
setBounds(200, 200, 400, 300);
// 设置是否显示
setVisible(true);
}
publicstaticvoid main(String[] args) {
new Main();
}
}
再次运行程序,可以看到我们的小窗口了。
画板好了,我们开始作画,作画一般是画在画布上,而不是直接在画板上作画,这里我们引出我们的画布javax.swing.JPanel。这里我们为了方便看出效果,将JPanel的背景色设置为绿色。
package com.anjoyo.test;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
publicclass Main extends JFrame{
public Main(){
//创建基础画布
JPanel pnBasic = new JPanel();
//将基础画布的背景色设置为绿色GREEN
pnBasic.setColor.GREEN);
//将画板和画布绑定
setContentPane(pnBasic);
// 设置默认关闭模式
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置标题栏
setTitle("我的小窗口");
// 设置窗口区域(x,y,width,heigth)
setBounds(200, 200, 400, 300);
// 设置是否显示
setVisible(true);
}
publicstaticvoid main(String[] args) {
new Main();
}
}
看我们的运行效果:
这里注意两点:
1)使用java.awt.Color类中的静态属性值来设置颜色,如Color.GREEN;
2) 需要将画板和画布绑定(setContentPane(pnBasic);),才能看出实际效果
加上颜色后,界面一下子好看多了,那我们能不能用更多的颜色来作画呢?答案是肯定的,但是我们需要注意一点,就是要新建其他画布,并且把新建的画布加入到我们的基础画布中才可以。
比如:这里我想要红黄蓝绿四块画布填充基础画布:
package com.anjoyo.test;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
publicclass Main extends JFrame{
public Main(){
//创建基础画布
JPanel pnBasic = new JPanel();
//将基础画布的背景色设置为绿色GREEN
//pnBasic.setColor.GREEN);
//创建红黄蓝绿四块小画布,并分别设置背景色
JPanel pnRed = new JPanel();
pnRed.setColor.RED);
JPanel pnYello = new JPanel();
pnYello.setColor.YELLOW);
JPanel pnBlue = new JPanel();
pnBlue.setColor.BLUE);
JPanel pnGreen = new JPanel();
pnGreen.setColor.GREEN);
//将红黄蓝绿四块小画布加入到基础画布中
pnBasic.add(pnRed);
pnBasic.add(pnYello);
pnBasic.add(pnBlue);
pnBasic.add(pnGreen);
//将画板和画布绑定
setContentPane(pnBasic);
// 设置默认关闭模式
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置标题栏
setTitle("我的小窗口");
// 设置窗口区域(x,y,width,heigth)
setBounds(200, 200, 400, 300);
// 设置是否显示
setVisible(true);
}
publicstaticvoid main(String[] args) {
new Main();
}
}
运行效果如下:
红黄蓝绿四块小画布是出来了,但是这个结果让人哭笑不得,因为我们想要的是四块区域完全占满基础画布,比如一行四列,或者两行两列这样来占满。
这是因为我们作画也不是随便画的,需要按照一定的样式,也即是我们的布局。这里我们的基础画布并没有指定任何形式的布局,它的默认布局是FlowLayout,也即按照上面的样式来排列,具体可见API介绍。
那么,这里我们如果想要填满基础面板,可以使用另外一种布局GridLayout,该布局为网状布局,可以指定行数和列数,代码如下:
package com.anjoyo.test;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
publicclass Main extends JFrame{
public Main(){
//创建基础画布
JPanel pnBasic = new JPanel();
//创建网站布局格式:2行2列
GridLayout lyGrid = new GridLayout(2,2);
//将基础画布的布局格式指定为上面定义的布局方式
pnBasic.setLayout(lyGrid);
//将基础画布的背景色设置为绿色GREEN
//pnBasic.setColor.GREEN);
//创建红黄蓝绿四块小画布,并分别设置背景色
JPanel pnRed = new JPanel();
pnRed.setColor.RED);
JPanel pnYello = new JPanel();
pnYello.setColor.YELLOW);
JPanel pnBlue = new JPanel();
pnBlue.setColor.BLUE);
JPanel pnGreen = new JPanel();
pnGreen.setColor.GREEN);
//将红黄蓝绿四块小画布加入到基础画布中
pnBasic.add(pnRed);
pnBasic.add(pnYello);
pnBasic.add(pnBlue);
pnBasic.add(pnGreen);
//将画板和画布绑定
setContentPane(pnBasic);
// 设置默认关闭模式
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置标题栏
setTitle("我的小窗口");
// 设置窗口区域(x,y,width,heigth)
setBounds(200, 200, 400, 300);
// 设置是否显示
setVisible(true);
}
publicstaticvoid main(String[] args) {
new Main();
}
}
再次运行:
这样,四色板就做出来了。