Swing
前言
这里是 Java--GUI 系列文章,主要介绍Java中的图形化界面编程及其实现。
Java的图形化界面编程除了在自学中可以直观地感受到效果,还会在考试的题目中察觉到重要性
关于作者:
- 小白(Libra),计算机兴趣爱好者,Java,C,Hadoop,MySQL
- Email : hewei20031009@163.com
- GitHub : https://github.com/Regel-zack
转载请注明出处
正文
第一个JFrame窗口
忽略掉没讲到的内容会在后续涉及到
首先建立一个运行类,用来存放主方法
/**
* Application 类
* 操作人:小白
* 日期:2021/11/8
* 时间:13:02
* @author 别欺负小白了好咩
*/
public class Application {
public static void main(String[] args) {
MyFirstFrame test = new MyFirstFrame();
test.drawFrame();
test.drawFrame(200,300,50,100);
test.drawFrame();
}
}
其次建立一个窗体类,其中带有窗体实例化以及绘制窗体的方法
import javax.swing.*;
import java.awt.*;
/**
* MyFirstFrame 类
* 操作人:小白
* 日期:2021/11/8
* 时间:13:04
* @author 别欺负小白了好咩
*/
public class MyFirstFrame {
int WIDTH;
int HEIGHT;
int LOCATION_X;
int LOCATION_Y;
JFrame f = new JFrame("第一个Swing窗体");
public void drawFrame(){
f.setSize(300,100);
f.setBackground(Color.WHITE);
f.setLocation(500,500);
f.setVisible(true);
System.out.println("默认窗口已显示");
}
public void drawFrame(int WIDTH, int HEIGHT, int LOCATION_X, int LOCATION_Y) {
f.setSize(WIDTH,HEIGHT); ;
f.setBackground(Color.WHITE);
f.setLocation(LOCATION_X,LOCATION_Y);
f.setVisible(true);
System.out.println("自定义窗口已显示");
}
}
以上代码仅作参考代码,具体教学思路请对照下面来看
首先在窗体绘制后,我们可以指定窗体的大小,背景颜色,位置以及是否显示。
但是在打开多个窗口后(运行多次窗口绘制方法),只会出现一个窗口,具体原因是由于我们只实例化了一个窗口对象,其余的几次只是在那基础上做了一些参数的修改,以下代码实现了打开多个窗口
import javax.swing.*;
import java.awt.*;
/**
* MyFirstFrame 类
* 操作人:小白
* 日期:2021/11/8
* 时间:13:04
* @author 别欺负小白了好咩
*/
public class MyFirstFrame {
int WIDTH;
int HEIGHT;
int LOCATION_X;
int LOCATION_Y;
public void drawFrame(){
JFrame f = new JFrame("这是默认窗口");
f.setSize(300,100);
f.setBackground(Color.WHITE);
f.setLocation(500,500);
f.setVisible(true);
System.out.println("默认窗口已显示");
}
public void drawFrame(int WIDTH, int HEIGHT, int LOCATION_X, int LOCATION_Y) {
JFrame f = new JFrame("这是自定义窗口");
f.setSize(WIDTH,HEIGHT); ;
f.setBackground(Color.WHITE);
f.setLocation(LOCATION_X,LOCATION_Y);
f.setVisible(true);
System.out.println("自定义窗口已显示");
}
}
使用前面的方法会避免创建多余的窗口,具体看需求来选择如何实现。
JLabel 标签组件
可以将JFrame理解为一个盘子,那么盘子上自然就可以承载其他的物品(组件),而这些组件只需要放上去(add)就可以随着盘子一起呈现给用户了。
JLabel 类的常用方法和常量
序号 | 方法或常量 | 类型 | 作用 |
---|---|---|---|
1 | public static final int LEFT | 常量 | 标签文本左对齐 |
2 | public static final int CENTER | 常量 | 标签文本居中对齐 |
3 | public static final int RIGHT | 常量 | 标签文本右对齐 |
4 | public JLabel() throws HeadlessException | 构造 | 创建一个JLabel对象 |
5 | public JLabel(String text) throws HeadlessException | 构造 | 创建一个标签并指定文本内容 |
6 | public JLabel(String text,int alignment) throws HeadlessException | 构造 | 创建一个标签并指定文本内容以及对齐方式,可以使用JLabel.LEFT 、JLabel.RIGHT、 JLabel.CENTER3个值 |
7 | public JLabel(String text,Icon icon,int alignment) throws HeadlessException | 构造 | 创建具有指定文本、图像和水平对齐方式的JLabel对象 |
8 | public JLabel(Icon image,int alignment) | 构造 | 创建具有指定图像和水平对齐方式的JLabel实例 |
9 | public void setText(String text) | 普通 | 设置标签的文本 |
10 | public String getText() | 普通 | 取得标签的文本 |
11 | public void setAlignment(int alignment) | 普通 | 设置标签对齐方式 |
12 | public void setIcon(Icon icon) | 普通 | 设置指定的图像 |
示例代码如下
import javax.swing.*;
/**
* Application 类
* 操作人:小白
* 日期:2021/11/8
* 时间:13:02
* @author 别欺负小白了好咩
*/
public class Application {
public static void main(String[] args) {
MyFirstFrame test = new MyFirstFrame();
test.drawFrame();
test.addJLabel(new JLabel("这是一个标签文本"),test.f);
}
}
import javax.swing.*;
import java.awt.*;
/**
* MyFirstFrame 类
* 操作人:小白
* 日期:2021/11/8
* 时间:13:04
* @author 别欺负小白了好咩
*/
public class MyFirstFrame {
int WIDTH;
int HEIGHT;
int LOCATION_X;
int LOCATION_Y;
JFrame f = new JFrame("这是一个窗口");
public void drawFrame(){
f.setSize(300,100);
f.setBackground(Color.WHITE);
f.setLocation(500,500);
f.setVisible(true);
System.out.println("默认窗口已显示");
}
public void drawFrame(int WIDTH, int HEIGHT, int LOCATION_X, int LOCATION_Y) {
f.setSize(WIDTH,HEIGHT); ;
f.setBackground(Color.WHITE);
f.setLocation(LOCATION_X,LOCATION_Y);
f.setVisible(true);
System.out.println("自定义窗口已显示");
}
public void addJLabel(JLabel jLabel,JFrame jFrame){
jFrame.add(jLabel);
System.out.println("标签组件已添加完毕!");
}
}
其中标签文本也可以定义成类变量来以便不需要临时实例化,这样的好处在于可以修改样式以及修改内容,具体可以看需求,这里仅做演示
JButton 按钮组件
按钮组件使用跟标签组件大体相似,这里不一一列举其常用方法,仅作示例
根据之前的调整,我们的代码可以修改为下面这样
import javax.swing.*;
/**
* Application 类
* 操作人:小白
* 日期:2021/11/8
* 时间:13:02
* @author 别欺负小白了好咩
*/
public class Application {
public static void main(String[] args) {
MyFirstFrame test = new MyFirstFrame();
test.drawFrame();
test.drawJLabel("这个是窗体之上的标签");
test.drawJButton("这个是窗体之上的按钮");
test.addJLabel(test.l,test.f);
test.addJLabel(test.b,test.f);
}
}
import javax.swing.*;
import java.awt.*;
/**
* MyFirstFrame 类
* 操作人:小白
* 日期:2021/11/8
* 时间:13:04
* @author 别欺负小白了好咩
*/
public class MyFirstFrame {
int WIDTH;
int HEIGHT;
int LOCATION_X;
int LOCATION_Y;
JFrame f = new JFrame("这是一个窗口");
JLabel l = new JLabel("这是一个标签");
JButton b = new JButton("这是一个按钮");
public void drawFrame(){
this.drawFrame(300,100,500,500);
}
public void drawFrame(int WIDTH, int HEIGHT, int LOCATION_X, int LOCATION_Y) {
f.setSize(WIDTH,HEIGHT); ;
f.setBackground(Color.WHITE);
f.setLocation(LOCATION_X,LOCATION_Y);
f.setVisible(true);
System.out.println("窗口已显示");
}
public void drawJLabel(String text){
l.setText(text);
System.out.println("标签内容已修改为: --> " + text);
}
public void drawJButton(String text){
b.setText(text);
System.out.println("按钮内容已修改为: --> " + text);
}
public void addJLabel(Container container,JFrame jFrame){
jFrame.add(container);
System.out.println("组件已添加完毕!");
}
}
其中控制台输出如下
小结
多加练习才能学好