swing组件分类:
- 顶层容器:jframe、japplet、jdialog、jwindow
- 中间容器:jpanel、jscrollpane、jsplitpane、jtoolbar
- 基本控件: imageicon(图标),jlabel(标签),itextfield(文本框),jtextarea(文本区域),jscrollpane(可滚动窗格),jscrollbar(滚动条),icheckbox(复选框),jradiobutton(单选按钮),jcombobox(下拉式列表和组合框)。
创建界面
了解完之后,我们开始创建窗口。
把界面类声明为jframe或jwindow的子类。
要创建swing程序,首先需要创建一个表示图形界面(窗口)的类。这个类的对象被当作容器,用于存储其他组件。
大多数情况下,采用jwindow类或者jframe类。
- jwindow是可被显示到用户界面上。简单窗口没有标题栏,最大化、最小化和关闭按钮,也没有操作系统普通窗口常用的其他元素。
- 包括这些窗口管理特性的窗口被称为jframe。(因此一般优先jframe)
注意:jwindow和jframe都是抽象类,所以我们需要创建它们的子类。
把窗口类声明为jframe或jwindow的子类。
在窗口类类的构造方式中调用父类的构造方法( 用super( ) ),来设置窗口类。
jframe的构造方法
- jframe():创建一个无标题的窗口。
- jframe(string title):创建一个指定窗口标题的窗口。
设置方法
下面来介绍一下jframe提供的,设置窗口的方法:
方法名和参数 | 方法概述 |
---|---|
setsize(int width, int height) | 设置窗口的大小,参数width和height分别表示窗口的宽度和高度。 |
setlocation(int x, int y) | 参数x和y分别表示窗口的坐标 |
setbounds(int a, int b, int width, int height) | 设置窗口的位置和大小,参数a和b表示窗口的初始位置,参数width和height表示窗口的宽度和高度。 |
setresizable(boolean b) | 设置窗口是否可调整大小,参数b为true表示可以调整大小,为false表示不可调整大小。 |
setvisible(boolean b) | 设置窗口是否可见,参数b为true表示可见,为false表示不可见。 |
setdefaultcloseoperation(int operation) | 设置窗口关闭时的操作,参数operation有多种取值可选 |
setextendedstate(int state): | 设置窗口的扩展状态,可以使窗口最大化、最小化或恢复大小 |
这些设置方法一般在窗口类的构造方法中就书写清楚,例如常见的标题、大小、可见度、位置坐标和关闭时的操作等等。
setdefaultcloseoperation(int operation)
下面是operation的范围以及描述。
关闭窗体方式 | 描述 |
---|---|
exit_on_close | 退出应用程序,默认窗口关闭 |
do_nothing_on_close | 什么都不做就将窗体关闭 |
dispose_on_close | 移除窗口的默认窗口关闭操作 |
hide_on_close | 隐藏窗口的默认窗口关闭 |
import javax.swing.*; class jframe extends jframe { public jframe (string title, int x, int y, int width, int height) { super(title); //调用父类构造方法设置标题 setbounds(x, y, width, height); //一步到位把位置和大小设置好 setvisible(true); //设置窗口可见性 setdefaultcloseoperation(exit_on_close); //设置关闭方式 } } public class test { public static void main(string[] args) { jframe frame = new jframe("frame",100,100,500,500); } }
可以看到我们得到了一个标题为frame的空白窗口。
操作方法
下面是窗口类的操作方法,后边会对组件等进行详细讲解。
方法名和参数 | 方法概述 |
---|---|
add(component comp) | 向容器中添加组件,参数comp为要添加的组件。 |
getcontentpane() | 获取窗口的内容面板,可以通过该方法向内容面板添加组件。 |
dispose() | 撤销当前窗口并释放所有使用的资源 |
import javax.swing.*; class jframe extends jframe { public jframe (string title, int x, int y, int width, int height) { super(title); //调用父类构造方法设置标题 setbounds(x, y, width, height); //一步到位把位置和大小设置好 setvisible(true); //设置窗口可见性 setdefaultcloseoperation(exit_on_close); //设置关闭方式 jlabel jlabel = new jlabel("这是一个带有标题的窗口");//这是一个标签组件 jlabel.sethorizontalalignment(swingconstants.center); //设置文本位置 add(jlabel); //调用add函数将标签组件添加到抽口当中 } } public class test { public static void main(string[] args) { jframe frame = new jframe("frame",100,100,500,500); } }
可以看到我们得到了一个标题为frame,内容为"这是一个带有标题的窗口"的窗口。
直接定义jframe类来创建窗口
也可以 直接定义jframe类来创建窗口。
import javax.swing.*; import java.awt.*; public class test { public static void main(string[] args) { jframe jframe = new jframe("jframe"); jframe.setbounds(300,300,500,500); jframe.setvisible(true); jframe.setdefaultcloseoperation(windowconstants.exit_on_close); label label = new label("label"); jframe.add(label); } }
这么看其实直接定义jframe比较简单,但是构造子类结构更加清晰。