本文主要介绍Java Swing最详细的基础知识的总结。文章中有非常详细的代码示例,对正在学习Java Swing的朋友很有帮助。有需要的可以参考一下。
一.导言Swing组件III的层次结构。Swing组件3.1 JFrame表单组件3.2 JDialog表单组件3.3 JLabel组件3.4文本字段3.5按钮IV。布局管理器4.1绝对布局4.2流动布局管理器4.3网格布局管理器4.4边界布局管理器
目录
Swing是一个为Java设计的GUI工具包。
Swing是JAVA基类的一部分。
Swing包括图形用户界面(GUI)设备,如文本框、按钮、分隔窗格和表格。
Swing提供了许多比AWT更好的屏幕显示元素。它们是用纯Java编写的,所以它们可以像Java本身一样跨平台运行,而不像AWT。他们是JFC的一部分。他们支持可替换的面板和主题(各种操作系统默认的唯一主题),但并没有真正使用原生平台提供的设备,只是在表面上模仿。这意味着您可以在任何平台上使用JAVA支持的任何面板。轻量级组件的缺点是执行速度慢,优点是可以在所有平台上采用统一的行为。
一、简介
从上图可以看出组件之间的继承关系。我们可以看到容器类下有四个子类。这四个子类中,除了JComponent类,其他三个都是Java AWT包中的类,JComponent是Java Swing出现的类。Sun在设计Java Swing时,使用JComponent在Java AWT到Java Swing的容器和组件之间进行过渡,这意味着Java Swing中的大多数容器和组件都继承了JComponent类。
除了JComponent类,其他三个容器类都是Java AWT中的容器。需要注意的是,容器分为顶层容器和中间容器。顶层容器是指图形界面最外层的容器,比如Window。中间容器是指存储在顶层容器或中间容器中的一种容器,如面板。在实际编程中,开发一个接口,应该是这样的:顶层容器在最外面(JFrame),其次是中间容器,放在表单上(JPanel),最后是基础组件放在中间容器上。这里需要注意的是,除了基本组件,容器还可以存放在容器中,如图所示:
我们经常使用的顶层容器是表单(JFrame)和对话框(JDialog),我们使用的中间容器是panel (JPanel)。开发中经常用到的大部分基本组件都是JComponent类的子类。
组件类的主要方法有:
(1) void enable():使组件可用。
(2) void disable():使组件不可用。
(3) void show():显示组件
(4) void paint():绘制图形
(5) void repaint():刷新
容器类的主要方法有:
(1) void add(组件c):将指定的组件添加到容器中。
(2) void setLayout():设置布局管理器。
的所有包含组件都可以继承或重载上述方法。
二、Swing 组件的层次结构
下表显示了常见的Swing组件:
组件名称
定义
JButton
摇摆按钮,可以配合一些图片或文字使用。
JCheckBox
表示Swing中的复选框组件。
JComBox
表示一个下拉列表框,它可以在下拉显示区域显示多个选项。
JFrame
表示一个Swing框架类。
JDialog
代表Swing版本的对话框
JLabel
表示Swing中的标签组件
JRadioButton
代表Swing的单选按钮
JList
表示可以在用户界面中显示一系列项的组件。
JTextField
代表性文本框
JPasswordField
表示密码框。
JTextArea
表示Swing中的文本区域
JOptionPane
表示Swing中的一些对话框
三、Swing组件
JFrame是一个独立于浏览器的主窗口,可以独立运行,通常用于开发桌面应用。/JFrame有边界和标题栏设置,大小可以调整。您需要向JFrame添加组件,或者您可以添加菜单或在其上绘图。
程序中JFrame的语法格式如下:
JFrame jf=new JFrame(标题);
container container=JF . getcontentpane();
JF:JF:JFrame类的一个对象
容器:容器类的对象可以通过用JFrame对象调用getContentPane()方法来获得。
我们应该有这样一个概念,Swing组件的表单通常与组件和容器相关,所以在创建JFrame对象后,我们需要调用getContentPane()方法将表单转换成容器,然后在容器中添加组件或设置布局管理器。通常,该容器用于包含和显示组件。如果需要向容器中添加一个组件,可以使用Cointainer类中的add()方法来设置它。例如:
Container.add(新的JButton(' button ');
让我们用Java代码做一个简单的表单如下:
包xmsj
导入Java . awt . color;
导入Java . awt . container;
导入javax . swing . jframe;
导入javax . swing . jlabel;
导入javax . swing . swing constants;
导入javax . swing . window constants;
公共类test1 {
公共静态void main(String[] args){
//创建一个表单对象
JFrame jf=new JFrame('这是JFrame窗体');
//获取一个容器来保存各种组件或布局管理器。
container container=JF . getcontentpane();
JLabel jl=new JLabel('这是JFrame表单');//创建一个JLabel标签
//将标签上的文本居中
JL . sethorizontal alignment(swing constants。中心);
//将标签添加到容器中
container . add(JL);
container . set background(color . white);//设置容器的背景颜色
//将窗体设置为可见
JF . set visible(true);
//设置表单大小
jf.setSize(200,150);
//设置窗体关闭模式。
JF . setdefaultcloseoperation(window constants。EXIT _ ON _ CLOSE);
}
}
如下图所示:
上面的程序展示了如何创建一个简单的表单,JFrame有其对应的方法,如下所示:
JFrame组件中提供了以下两种常见的构造方法:
(1)JFrame():创建一个没有窗口标题的窗口框架。
(2)JFrame(String):创建一个指定窗口标题的窗口框架。
JFrame的主要方法如下表所示:
方法
功能
addNotify()
创建对等框架。
处置()
清除窗口对象
getIconImage()
获取窗口的图标。
getMenuBar()
获取窗口的菜单栏。
getTitle()
获取窗口的标题。
paramString()
返回窗口的参数字符串。
isResizable()
如果窗口大小是可变的,则返回真值。
移除(菜单组件)
从窗口中删除指定的菜单栏
setIconImage(图像)
设置窗口的图标。
3.1 JFrame窗体组件
JDialog form是Swing组件中的一个对话框,继承了awt组件中的java.awt.Dialog类。
对话框(JDialog)类似于框架(JFrame),但一般是临时窗口,主要用于显示提示信息或接受用户输入。
因此,通常不需要改变对话框中的菜单栏和窗口大小。此外,当对话框出现时,您可以设置禁止其他窗口的输入,直到此对话框关闭。
在应用程序中创建JDialog表单需要实例化JDialog类,通常使用以下JDialog类的构造方法。
(1)public JDialog():创建一个没有标题和父窗体的对话框。
(2) public JDialog(Frame f):创建一个指定父窗体的对话框,但该窗体没有标题。
(3)公共JDialog(帧f,布尔模型):创建一个指定类型的对话框,并指定父窗体,但该窗体没有指定标题。
(4)公共JDialog(帧f,字符串titl):创建一个指定标题的父窗体的对话框
(5)公共JDialog(帧f,字符串标题,布尔模型):创建一个指定标题、窗体和模式的对话框
下面我们用代码来实现:
包njci。软件。mynotepad 2018
导入Java。awt。容器;
导入javax。挥棒。jbutton
导入javax。挥棒。jdialog
导入javax。挥棒。jframe
导入javax。挥棒。jlabel
导入javax。挥棒。jpanel
导入javax。挥棒。jtextfield
公共类配置对话框扩展JDialog {
/**
*
*/
私有静态最终长串行版本uid=-713398359834685238 l;
公共配置对话框(JFrame框架){
超级(帧,'这是一个对话框,真);
//Container Container=getContentPane();//创建一个容器
//container.add(新JLabel('这是一个对话框'));//在容器中添加标签
//添加内部控件
JPanel pnl config=new JPanel();
pnlConfig.setLayout(空);
JLabel lblWidth=new JLabel('宽度');
JLabel lblHeight=new JLabel('高度');
final JTextField txt width=new JTextField();
final JTextField txt height=new JTextField();
JButton btnSave=new JButton('保存');
JButton btnCancel=新的JButton('取消');
//进行布局
lblWidth.setBounds(50,30,60,40);
txtWidth.setBounds(150,30,160,40);
lblHeight.setBounds(50,100,60,40);
txtHeight.setBounds(150,100,160,40);
btnSave.setBounds(50,160,100,40);
btnCancel.setBounds(200,160,100,40);
pnl配置加(LBL宽度);
pnl配置add(txt宽度);
pnl配置加(LBL身高);
pnl配置添加(txt高度);
pnl配置添加(BTN保存);
pnl配置添加(BTN取消);
这个。添加(pnl配置);
this.setSize(400,320);
这个。setresizable(false);//窗体大小不可改变
这个。setlocationrelativeto(帧);//居中显示
}
}
包爪哇翼
导入Java。awt。事件。动作事件;
导入Java。awt。事件。动作监听器;
导入javax。挥棒。jbutton
导入javax。挥棒。jframe
导入javax。挥棒。joptionpane
公共类我的框架扩展JFrame {
private static final long serial版本uid=4232937812480671357 l;
公共MyFrame(){
final JFrame frmMain=new JFrame('我的第一个记事本');
frmMain.setSize(400,300);
弗曼。setdefaultcloseoperation(DISPOSE _ ON _ CLOSE);
弗曼。setlocationrelativeto(null);//居中显示
弗曼。设置可见(真);
config dialog dlgConfig=新的配置对话框(frmMain);
DLG配置。设置可见(真);
}
/**
*
*/
公共静态void main(String[] args){
新建我的相框();
}
}
运行效果如下所示:
3.2 JDialog窗体组件
在摇摆中显示文本或提示信息的方法是使用标题,它支持文本字符串和图标。在应用程序的用户界面中,一个简短的文本标签可以使用户知道这些组件的目的,所以标签在摇摆中是比较常用的组件。
标签由JLabel类定义,它的父类为JComponent类。
JLabel组件显示的是静态文本或者图片,在通常情况下是不能编辑的,只起到提示的作用。观察即时通信软件登录界面输入框左侧的头像,他就可以用JLabel组件实现。
JLabel组件中主要的构造方法如下:
(1)JLabel():创建空的标签。
(2)JLabel(字符串):创建一个带初始字符串的标签。
(3)JLabel(图标):创建一个带有指定图像的标签。
JLabel的主要方法见下表所示:
方法
功能
文字排版(字符串)
设置显示内容
getText()
获取显示内容
getAlignment()
获取对齐方式
setAlignment()
设置对齐尖牙
3.3 JLabel组件
文本域一般用来让用户输入姓名、信用卡号这样的信息,它是一个能够接收用户的键盘输入的小块区域。
在创建文本域时,参数类型有四种:空的、空的并且具有指定长度、带有初始文本内容和带有初始文本内容并具有指定长度的。
正文的主要方法如下:
方法
功能
getColumns()
返回文本字段中的列数。
getEchoChar()
返回用于回显的字符。
setEchoCharacter(字符)
设置文本字段的回显字符。
setEditable(布尔值)
设置文本字段是否为只读。
setText(字符串)
在文本字段中设置文本值。
getText()
返回文本字段中的输入文本值。
3.4 文本域
几乎所有的交互程序中都有按钮。是一种交互能力强,交互方便的控件。该组件提供了“按下并动作”的基本用户界面。
施工方法如下:
(1): jbutton():创建一个没有标签字符串的新按钮类对象。
(2): JButton (String label):用标签字符串创建一个新的Button类对象。
实现了以下代码:
包javaswing
导入Java . awt . event . action event;
导入Java . awt . event . action listener;
导入javax . swing . jbutton;
导入javax . swing . jframe;
导入javax . swing . joptionpane;
公共类MyFrame扩展JFrame {
private static final long serial version uid=4232937812480671357 l;
公共MyFrame(){
Final JFrame frmMain=new JFrame('我的第一个记事本');
frmMain.setSize(400,300);
frmmain . setdefaultcloseoperation(DISPOSE _ ON _ CLOSE);
frmmain . setlocationrelativeto(null);//居中显示
frmmain . set visible(true);
//为按钮添加独立事件
JButton jbn=new JButton('系统配置');
frmmain . add(jbn);
}
/**
*
*/
公共静态void main(String[] args){
new my frame();
}
}
运行效果如下:
3.5 按钮
在Swing中,每个组件在容器中都有特定的位置和大小,但是很难判断各个组件在容器中的具体位置和大小。布局管理器提供了排列Swing组件、在容器中显示它们的方法以及基本的布局功能。使用布局管理器比程序员直接控制Swing组件在容器中的位置和大小要方便得多,而且可以有效地处理整个表单的布局。Swing提供的常见布局管理器包括流程布局管理器、边界布局管理器和网格布局管理器。本节将讨论Swing中常用的布局管理器。
四.布局管理器
在Swing中,除了布局管理器之外,还可以使用绝对布局。绝对布局是指定组件在容器中的位置和大小。您可以使用绝对坐标来指定元件的位置。
(1)使用Container.setLayout(null)方法取消布局管理器。
(2)使用Component.setBounds()方法设置每个组件的大小和位置。
让我们用下面的代码实现绝对布局:
包javaswing
导入javax . swing . jbutton;
导入javax . swing . jdialog;
导入javax . swing . jframe;
导入javax . swing . jlabel;
导入javax . swing . jpanel;
导入javax . swing . jtextfield;
公共类ConfigDialog扩展JDialog {
/**
*
*/
private static final long serial version uid=-713398359834685238 l;
公共配置对话框(JFrame框架){
超级(框架,'这是一个对话框',真);
//Container Container=getContentPane();//创建一个容器
//container.add(new JLabel('这是对话框'));//向容器添加标签
//添加内部控件
JPanel pnl config=new JPanel();
pnlConfig.setLayout(空);
jlabelbl width=new jlabel(' width ');
JLabel LBL height=new JLabel(' height ');
final JTextField txt width=new JTextField();
final JTextField txt height=new JTextField();
JButton BTN save=new JButton(' save ');
JButton BTN cancel=new JButton(' cancel ');
//进行绝对布局
lblWidth.setBounds(50,30,60,40);
txtWidth.setBounds(150,30,160,40);
lblHeight.setBounds(50,100,60,40);
txtHeight.setBounds(150,100,160,40);
btnSave.setBounds(50,160,100,40);
btnCancel.setBounds(200,160,100,40);
pnl config . add(LBL width);
pnl config . add(txt width);
pnl config . add(LBL height);
pnl config . add(txt height);
pnl config . add(BTN save);
pnl config . add(BTN cancel);
this . add(pnl config);
this.setSize(400,320);
this . setresizable(false);//不能更改窗体大小。
this . setlocationrelativeto(frame);//居中显示
}
公共静态void main(String[] args) {
//new config dialog(frame);
}
}
4.1 绝对布局
流管理器是最基本的布局管理器。顾名思义,整个容器中的布局像“流”一样从左到右放置组件,直到占据这一行的所有空间,然后向下移动一行。默认情况下,组件排列在每一行的中间,但是每一行中组件的排列位置也可以通过设置来更改。
FlowLayout布局管理器是最简单的布局管理方法,也是JPanel的默认布局。它将组件从左到右、从上到下以流的方式放置在容器中,即每一行从左到右放置组件,当一行放不下时换行。Wlayout的默认对齐方式是居中对齐,也可以手动设置为左对齐或右对齐。
WLayout中常见的构造方法:
(1)FlowLayout():创建默认的FlowLayout管理器。
(2)FlowLayout(int):用指定的对齐方式创建一个FlowLayout管理器。参数:
流程布局。左侧(左对齐),流程布局。右(右对齐),流程布局。居中(居中对齐)。
(3)FlowLayout(int,int,int);使用指定的对齐方式和间距创建FlowLayout管理器。其中,第一个参数是对齐,第二个参数是组件之间以及组件与容器边缘之间的水平距离,第三个参数是组件之间以及组件与容器边缘之间的垂直距离。
WLayout的主要方法如下表所示:
方法
功能
getAlignment()
返回对齐
getHgap()
返回组件水平间距或组件列间距。
getVgap()
返回组件垂直间距或组件行间距。
setAlignment
设置对齐方式
setHgap()
设置组件列间距
setVgap()
设置行距
下面的代码实现了FlowLayout的用法:
包javaswing
导入Java . awt . container;
导入Java . awt . flow layout;
导入javax . swing . jbutton;
导入javax . swing . jframe;
导入javax . swing . jlabel;
导入javax . swing . jpanel;
导入javax . swing . window constants;
公共类FlowLayoutDemo扩展JFrame{
公共FlowLayoutDemo(){
SetTitle('此表单使用流布局管理器');//设置表单标题
容器c=getContentPane();
//将表单设置为使用流布局管理器,将组件右对齐,并设置组件之间的水平和垂直间距。
setLayout(新的FlowLayout(2,10,10));
for(int I=0;i10i ){
C.add(新的JButton(' button ' I));
}
setSize(300,200);
set visible(true);
setDefaultCloseOperation(window constants。EXIT _ ON _ CLOSE);
}
公共静态void main(String[] args){
new FlowLayoutDemo();
}
}
运行效果如下图所示:
4.2 流布局管理器
GridLayout布局管理器将容器区域分为M行M列,即大小相等的网格,容器中的组件被放置在这些网格中,占据一个大小完全相同的网格。
GridLayout创建如下:
(1)GridLayout():创建默认的GridLayout,所有组件都显示在一行中。
(2)GridLayout(int,int)根据指定的行数和列数创建GridLayout。
(3)Gridlayout(int,int,int)根据指定的行数、列数、行间距和列间距创建Gridlayout。
GridLayout的主要方法如下表所示:
方法
功能
getHgap()
返回组件的水平间距。
getVgap()
返回组件的垂直间距。
setHgap()
设置组件的水平间距。
setVgap()
设置组件垂直间距。
getRows()
获取网格中的行数。
getColumns()
获取网格中的列数。
setRows()
设置网格中的行数。
setColumns()
设置网格中的列数。
向网格中添加组件有两种方式:一种是默认顺序,即从左到右、从上到下;另一种是表示加入时的网格位置。
具体代码实现如下:
包javaswing
导入Java . awt . container;
导入Java . awt . gridlayout;
导入javax . swing . jbutton;
导入javax . swing . jframe;
导入javax . swing . window constants;
公共类GridLayoutPosition扩展JFrame{
public GridLayoutPosition(){
容器c=getContentPane();
//设置容器使用网络布局管理器,设置一个7行3列的网格,行间距5,列间距5。
setLayout(new GridLayout(7,3,5,5));
for(int I=0;i20i ){
C.add(新的JButton(' button ' I));//循环添加按钮
}
setSize(300,300);
SetTitle('这是一个使用网格布局管理器的窗体');
set visible(true);
setDefaultCloseOperation(window constants。EXIT _ ON _ CLOSE);
}
公共静态void main(String[] args){
new GridLayoutPosition();
}
}
运行效果如下:
4.3 网格布局管理器
当默认不指定表单布局时,Swing组件的布局模式是边界布局管理器,可以将容器划分为东、南、西、北、中五个区域,并在这五个区域添加组件。当容器调用容器类的add()方法添加一个组件时,它可以在边界布局管理器中设置这个组件的区域。区域的控制可以由BorderLayout类中的成员变量决定。这些成员变量的具体含义如下表所示:
成员变量
意义
BorderLayout。北方
当您将组件添加到容器中时,该组件被放置在顶部。
BorderLayout。南方
当您将组件添加到容器中时,该组件被放置在底部。
BorderLayout。东方
当您将组件添加到容器中时,该组件被放置在右端。
BorderLayout。西方的
向容器中添加组件时,组件被放置在左端。
BorderLayout。中心
向容器中添加组件时,该组件被放置在中间并开始填充,直到它与其他组件边界连接。
以下代码用于实现:
包javaswing
导入Java . awt . borderlayout;
导入Java . awt . container;
导入javax . swing . jbutton;
导入javax . swing . jframe;
导入javax . swing . window constants;
公共类BorderLayoutPosition扩展JFrame{
//定义组件放置位置的数组
String[] border={BorderLayout。居中,边框布局。北方,边境布局。南方,边境布局。西边,边界布局。东};
String[] buttonName={ '中按钮','北按钮','南按钮','西按钮','东按钮' };
public BorderLayoutPosition(){
SetTitle('此表单使用边界布局管理器');
容器c=getContentPane();//定义一个容器
set layout(new BorderLayout());//将容器设置为边界布局管理器
for(int I=0;iborder.lengthi ){
//在容器中添加按钮并设置按钮布局
c.add(border[i],new JButton(button name[I]);
}
setSize(350,250);//设置表单大小
set visible(true);//将窗体设置为可见
//设置窗体关闭模式。
setDefaultCloseOperation(window constants。DISPOSE _ ON _ CLOSE);
}
公共静态void main(String[] args){
new BorderLayoutPosition();
}
}
实现效果如下图所示:
这篇关于Java Swing基础知识的最详细的总结就到此为止。更多Java Swing知识的相关总结,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。