〇、Swing包
javax.swing曾经是一个Java的扩展包,在Java1.2中被纳入官方标准库,除此之外java还有诸多如JavaFX的GUI库,这里先只记录Swing包的使用。
Swing是一个不基于对等元素的GUI工具包,简单来讲,使用Swing绘制的GUI,系统底层窗口系统只负责显示一个窗口,绘制等工作全部交给工具包来完成,因此它绘制出的GUI在各个平台上都拥有相似的观感和一致的功能。
一、窗体(Window - JFrame)
由于面向对象的特性,我们进行任何设计时都必须保持对象的理念,在Swing包中,所有的组件和窗口也都是以对象的形式实现的。我们的首要目标是创建一个窗体,让他显示在屏幕上。
1. 创建窗体
JFrame frame= new JFrame();
JFrame frame= new JFrame("Title");
- 该语句创建了一个JFrame类的对象,第二种构造器直接初始化了一个窗体的标题显示在窗口的左上角。
- JFrame与其他组件最大的区别就是他是不依靠任何画布而绘制的组件
- 光写这两句是没用的,因为JFrame窗体默认不可视且大小为0*0,我们需要调用更多方法来设置窗体属性。
2. 窗体属性
1) 常用的JFrame方法
frame.isVisible(); //返回boolean值,判断窗体是否可见
frame.setVisible(boolean); //设置窗体的可见性
frame.setTitle("This is just a frame"); //设置窗体标题
frame.getTitle(); //以String类返回窗体的标题
frame.setSize(x,y); //设置窗体的宽度、高度
frame.setLocation(x,y); //设置窗体的位置,以屏幕左上角为原点(0,0)
frame.setBounds(x,y,width,height); //同时设置窗体的位置和尺寸
frame.setResizable(boolean); //设置窗体尺寸能否由用户控制
frame.isResizable(); //返回boolean值,判断窗体能否由用户控制
2) 设置退出操作
除此之外,我们还可以规定用户点击右上角的退出按钮时系统会做出怎样的操作
frame.setDefaultCloseOperation(int x);
在JFrame类中,预设了如下常量,他们被声明为static final型,一般用于配合上述方法使用。
JFrame.DO_NOTHING_ON_CLOSE (0) //什么都不做,按钮失效
JFrame.HIDE_ON_CLOSE (1) //隐藏窗口,保持后台运行,任务管理器中可见(不进行设置时默认为此值)
JFrame.DISPOSE_ON_CLOSE (2) //隐藏并释放掉该窗体占用的资源,释放掉全部窗体后,进程自动终止
JFrame.EXIT_ON_CLOSE (3) //直接终止进程
二、其他组件(Component)
目前只简单记录一些常见的组件(实际上JFrame也是组件,Component是所有Swing对象的最原始的超类),以及如何使用JPanel装载组件并显示在窗体上。
铺垫: Swing包内的所有Component子类都已经设置好了一些给定的、可调节的组件的参数,且他们都有自己的访问器(get)和修改器(set)(例外: 对于boolean类型的属性,他的访问器前缀为is),这样有一对完整的方法的参数称为该类的属性(property),以JLabel为例,如下所示,JLabel有一个text属性和一个Icon属性,我们可以使用set和get来对他进行修改和调整。为了节省解释空间,以后介绍组件时只提及该组件常用的属性。
1、标签(JLabel)
一个非常简洁的标签。你可以向其中加入String或Icon来显示信息
属性:
-
- Text (String)
- Icon (Icon)
var label=new JLabel(); var label=new JLabel("Tommorrow will be better"); //预设标签内的信息,也可以接受Icon类 label.setText("But this is just a label"); //设置标签的信息 label.getText(); //获取文本 label.setIcon(Icon i); //设置标签的信息(Icon类) label.getIcon(); //获取图标
2、按钮(JButton)
JButton会按照Swing包内的模板创建一个按钮,用户可以进行点击来与其交互
属性:
-
- Text (String)
- Icon (Icon)
var button=new JButton();
var button=new JButton("Click me");
var button=new JButton(Icon i);
3. 文本框(JTextField)
一个文本框,用户可以向内部输入文字
属性:
-
- Text (String)
- Editable (boolean) --用户能否修改内容的权限
var textField=new JTextField();
var textField=new JTextField("Enter information here");
4. 面板/容器(Panel)
简单粗暴地向窗体中添加(.add)组件没有问题,但是我们这次选用一种比较文明的方式:先创建一个JPanel类作为其他功能性组件的容器,将所有功能性组件加入该容器内,组装到窗体上。
var panel=new JPanel();
frame.setContentPane(panel);
frame.add(Component);
panel.add(Component);
以上,ContentPane也是JFrame的一个属性,其中的set方法可以将一个JPanel对象装载到自己的窗体上,之后,使用add方法就可以向窗体中添加组件了,注意:调用JFrame的add方法会自动地向当前窗体已经存在的JPanel容器中添加组件,所以在以上情况下,frame或panel调用的add方法会产生同样的效果。