Java学习笔记-Day41 Java GUI

  • 一、GUI 图形化用户接口
  • 二、Swing的简介
  • 三、Swing的使用
  • 1、安装windowBuilder插件
  • 2、新建Application Window文件


一、GUI 图形化用户接口


GUI(图形化用户接口)是和用户进行交互的、可视化的界面。

Java 中编写 GUI 有两种工具包,分别为 AWT 和 Swing。

Swing 是 AWT 的拓展,具有比 AWT 更加丰富的组件和方法。AWT 和 Swing 都能跨平台使用。AWT 会随着不同的系统平台,UI 样式会有所变化。而 Swing 设计完毕后在所有平台下样式一致。

二、Swing的简介


Swing 是一个为Java设计的GUI工具包,是JAVA的基础类,其包括了 GUI 器件,如:按钮、文本框、分隔窗格、表等等。

Swing 提供许多比 AWT 更好的屏幕显示元素。它们都是用纯Java写成的,所以和 Java 一样都是可以跨平台运行。它们支持可更换的面板和主题(各种操作系统都有其默认的特有主题),Swing 的屏幕显示元素不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着可以在任意平台上使用 JAVA 支持的任意面板。

轻量级组件的优点是可以在所有平台上采用统一的行为,缺点则是执行速度较慢。

三、Swing的使用


想要使用在Eclipse中使用Swing的话,需要安装windowBuilder插件。

1、安装windowBuilder插件


1、下载 windowBuilder.rar 文件,解压这个文件后,会得到如下两个文件:

gui在实际中很少用 java gui和java_Java


2、复制 links 文件夹到 eclipse 的根目录。

gui在实际中很少用 java gui和java_java_02


3、将WindowBuilder_v1.5的文件夹放在任意目录下,我是放在 D:\develop\WindowBuilder_v1.5 路径下。

gui在实际中很少用 java gui和java_gui在实际中很少用 java_03


4、修改 links 文件夹中的 windowBuilderPlugin.link 文件,将该文件中的 path 值修改为 windowBuilder 插件的目录。

gui在实际中很少用 java gui和java_java_04


gui在实际中很少用 java gui和java_Swing_05


5、重新启动 eclipse 软件。


2、新建Application Window文件


1、鼠标在项目右键,选择 New -> Other。

gui在实际中很少用 java gui和java_Swing_06


2、在文本框输入 win 进行搜索,将会出现 Application Window 选择,选择 Application Window,然后下一步。

gui在实际中很少用 java gui和java_gui在实际中很少用 java_07


3、输入包名和类名,点击完成。

gui在实际中很少用 java gui和java_java_08


4、创建完成后,如图所示:

gui在实际中很少用 java gui和java_gui在实际中很少用 java_09


5、点击打开创建的 LoginFrame.java 文件,点击 Design 切换,就可以使用拖拉的方法设计界面。

gui在实际中很少用 java gui和java_java_10



  • 添加组件后的LoginFrame.java文件代码
import java.awt.EventQueue;
	import java.awt.Font;
	import java.awt.event.ActionEvent;
	import java.awt.event.ActionListener;
	import java.util.List;
	
	import javax.swing.JButton;
	import javax.swing.JFrame;
	import javax.swing.JLabel;
	import javax.swing.JPasswordField;
	import javax.swing.JTextField;
	
	import com.etc.os.dao.UserDao;
	import com.etc.os.entity.User;
	
	public class LoginFrame {
	
		private JFrame frame;
		private JTextField txtName;
		private JPasswordField txtPwd;
	
		/**
		 * 程序入口
		 */
		public static void main(String[] args) {
			EventQueue.invokeLater(new Runnable() {
				public void run() {
					try {
						//实例化LoginFrame(登录窗口)
						LoginFrame window = new LoginFrame();
						//设置frame可见
						window.frame.setVisible(true);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			});
		}
	
		/**
		 * 构造方法
		 */
		public LoginFrame() {
			//初始化内容面板
			initialize();
		}
	
		/**
		 * 初始化内容面板
		 */
		private void initialize() {
			// 实例化JFrame(窗体)
			frame = new JFrame();
			// 调用JFrame的setBounds方法,设置frame的位置、长度和高度
			frame.setBounds(100, 100, 450, 300);
			// 设置用户在此窗体上发起 "close"时默认执行的操作
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			// frame.getContentPane():获取frame的container(内容面板)
			// setLayout(null):null表示绝对布局
			frame.getContentPane().setLayout(null);
	
			// 实例化JTextField(文本框)
			txtName = new JTextField();
			// 设置textField的位置、长度和高度
			txtName.setBounds(144, 57, 177, 21);
			// 将某个组件(一般都是组件类的子类) 添加到内容面板上来
			frame.getContentPane().add(txtName);
			// 设置此文本字段中的列数。列是近似平均字符宽度,它与平台有关,
			// 参数columns和JTextField在某些布局下的显示宽度相关,
			// 就是设宽度,每个单位宽度等于当前字体下 'm' 字符的宽度,10 就是:10 * 这个单位宽度
			txtName.setColumns(10);
	
			txtPwd = new JPasswordField();
			txtPwd.setBounds(144, 104, 177, 21);
			frame.getContentPane().add(txtPwd);
	
			JButton loginButton = new JButton("\u767B\u5F55");
			//ActionListener:用于接收动作事件的侦听器界面
			//addActionListener:添加一个 ActionListener
			loginButton.addActionListener(new ActionListener() {
				//actionPerformed:发生动作时调用
				public void actionPerformed(ActionEvent e) {}
			});
			loginButton.setBounds(62, 169, 93, 21);
			frame.getContentPane().add(loginButton);
	
			JButton registerButton = new JButton("\u6CE8\u518C");
			registerButton.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					RegisterFrame rf = new RegisterFrame();
					rf.frame.setVisible(true);
				}
			});
			registerButton.setBounds(191, 168, 93, 23);
			frame.getContentPane().add(registerButton);
	
			JLabel lblNewLabel_1 = new JLabel("\u5BC6\u7801\uFF1A");
			lblNewLabel_1.setFont(new Font("微软雅黑", Font.PLAIN, 15));
			lblNewLabel_1.setBounds(80, 106, 54, 15);
			frame.getContentPane().add(lblNewLabel_1);
	
			JLabel lblNewLabel = new JLabel("\u8D26\u53F7\uFF1A");
			lblNewLabel.setFont(new Font("微软雅黑", Font.PLAIN, 15));
			lblNewLabel.setBounds(80, 60, 54, 15);
			frame.getContentPane().add(lblNewLabel);
	
			JLabel lblNewLabel_2 = new JLabel("\u8BA2\u9910\u7CFB\u7EDF");
			lblNewLabel_2.setFont(new Font("微软雅黑", Font.PLAIN, 20));
			lblNewLabel_2.setBounds(171, 10, 102, 26);
			frame.getContentPane().add(lblNewLabel_2);
			
			JButton exitButton = new JButton("\u9000\u51FA");
			exitButton.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
				}
			});
			exitButton.setBounds(309, 168, 93, 23);
			frame.getContentPane().add(exitButton);
		}
	}