Java深入学习图形用户界面GUI之创建窗体
作者:遇安.112 时间:2022-11-17 02:40:36
GUI全程是Graphical User Interface,即图形用户界面。顾名思义,GUI就是可以让用户直接操作的图形化界面,包括窗口、菜单、按钮、工具栏和其他各种图形界面元素。目前,图形用户界面已经成为一种趋势,几乎所有的程序设计语言都提供了GUI设计功能。
Java针对GUI设计提供了丰富的类库,这些类分别位于java.awt和javax.swing包中,简称为AWT和Swing。AWT引入了大量的Windows函数,因此称为中重量级组件。Swing是以AWT为基础构建起来的轻量级的图形界面组件,在java的图形界面开发中使用更多,本文将对Swing相关知识进行讲解。
Swing概述:
Swing是Java语言开发图形化界面的一个工具包。它以抽象窗口工具包(AWT)为基础,使跨平台应用程序可以使用可插拔的外观风格。Swing拥有丰富的库和组件,使用非常灵活,开发人员只用很少的代码就可以创建出良好的用户界面。
在Java中,所有的Swing组件都保存在javax.swing包中,为了有效地使用Swing组件,必须了解Swing包的层次结构和继承关系。
Swing组件的所有类都继承自Container类,然后根据GUI开发的功能扩展了两个主要的分支,分别是容器分支和组件分支。其中,容器分支是为了实现图形化用户界面窗口的容器而设计的,而组件分支则是为了实现向容器中填充数据、元素和交互组件等功能。
在容器分支中,Swing组件类中有3个组件是继承的AWT的Window类,而不是继承自JComponent类,这3个组件是Swing中的顶级容器类,它们分别是JWindow、JFrame和JDialog。其中,JFrame和JDialog是最简单也是最常用的顶级容器,本文将对这两种顶级容器的基本使用方法进行详细讲解。
JFrame,它是一个独立存在的顶级容器(也称窗口),不能放置在其他容器中。JFrame支持通用窗口的所有基本功能,例如窗口最小化、设定窗口大小等。
JFrame案例:
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
public class GUI_1JFrame常用方法 extends JFrame {
public static void main(String[] args) {
//使用SwingUtilities工具调用createAndShowGUI()方法显示GUI程序
SwingUtilities.invokeLater(GUI_1JFrame常用方法::createAndShowGUI);
}
private static void createAndShowGUI() {
//创建并设置JFrame容器窗口
JFrame frame = new JFrame("JFrameText");
//设置并关闭窗口时的默认操作
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口标题
frame.setTitle("窗口");
//设置窗口尺寸
frame.setSize(350, 300);
//设置窗口显示位置
frame.setLocation(300, 200);
//让组件显示
frame.setVisible(true);
//改变窗口图标
Image image;
try{ image= ImageIO.read(new File("图片路径"));
frame.setIconImage(image);
}catch (IOException e){
e.printStackTrace();
}
//获取标题
System.out.println(frame.getTitle());
}
}
JDialog,它是Swing的另一个顶级容器,它与Dialog一样都表示对话框窗口。JDialog对话框可分为两种,分别是模态对话框和非模态对话框。模态对话框是指用户需要处理完当前对话框后才能继续与其他窗 * 互对话框,而非模态对话框是允许用户处理对话框的同时与其他窗 * 互的对话框。
JDialog案例:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class jdialog {
public static void main(String[] args) {
//建立两个按钮
JButton btn1=new JButton("模态对话框");
JButton btn2=new JButton("非模态对话框");
//创建并设置JFrame容器窗口
JFrame f=new JFrame("DialogDemo");
//设置窗口尺寸
f.setSize(300,250);
//设置窗口显示位置
f.setLocation(300,200);
f.setLayout(new FlowLayout());//为内容面板设置布局管理器
//在Container对象上添加按钮
f.add(btn1);
f.add(btn2);
//设置单击关闭按钮默认关闭窗口
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//让组件显示
f.setVisible(true);
final JLabel label=new JLabel();
//定义一个JDialog对话框
final JDialog dialog=new JDialog(f,"Dialog");
dialog.setSize(220,150);//设置对话框大小
dialog.setLocation(350,250);//设置对话框位置
dialog.setLayout(new FlowLayout());//设置布局管理器
final JButton btn3=new JButton("确定");//创建按钮对象
dialog.add(btn3);//在对话框的内容面板添加按钮
//为“模态对话框”按钮添加单击事件
btn1.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
//设置对话框为模态
dialog.setModal(true);
//如果JDialog窗口中没有添加JLabel标签,就把JLabel标签加上
if(dialog.getComponents().length==1){
dialog.add(label);
}
//否则修改标签的内容
label.setText("模态对话框,单击确定按钮关闭");
//显示对话框
dialog.setVisible(true);
}
});
//为“非模态对话框”按钮添加单击事件
btn2.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
//设置对话框为非模态
dialog.setModal(false);
//如果JDialog窗口中没有添加JLabel标签,就把JLabel标签加上
if(dialog.getComponents().length==1){
dialog.add(label);
}
//否则修改标签的内容
label.setText("非模态对话框,单击确定按钮关闭");
//显示对话框
dialog.setVisible(true);
}
});
//为对话框中的按钮添加单击事件
btn3.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.dispose();
}
});
}
}
补充小知识:JPanel
扩展上面的JFrame案例
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
public class GUI_1常用方法 extends JFrame {
public static void main(String[] args) {
//使用SwingUtilities工具调用createAndShowGUI()方法显示GUI程序
SwingUtilities.invokeLater(GUI_1常用方法::createAndShowGUI);
}
private static void createAndShowGUI() {
//创建并设置JFrame容器窗口
JFrame frame = new JFrame("JFrameText");
//设置并关闭窗口时的默认操作
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口标题
frame.setTitle("窗口");
//设置窗口尺寸
frame.setSize(350, 300);
//设置窗口显示位置
frame.setLocation(300, 200);
//让组件显示
frame.setVisible(true);
//改变窗口图标
Image image;
try{ image= ImageIO.read(new File("图片路径"));
frame.setIconImage(image);
}catch (IOException e){
e.printStackTrace();
}
//获取标题
System.out.println(frame.getTitle());
//创建JPanel对象
JPanel jp=new JPanel();
//设置字体大小
Font font=new Font("仿宋",Font.BOLD,20);
//JLabel() ==>创建一个没有图像的 JLabel实例,标题为空字符串。
//JLabel(String text) ==>使用指定的文本创建一个 JLabel实例。
JLabel jl1=new JLabel("用户名:");
jl1.setFont(font);//设置统一的字体,看起来更美观整齐
//JTextField(String text) ==>构造一个新的 TextField ,用指定的文本初始化。
JTextField jf1=new JTextField("请输入用户名:",20);
jf1.setFont(font);//设置统一的字体
JLabel jl2=new JLabel("密码:");
jl2.setFont(font);//设置统一的字体
JTextField jf2=new JTextField("请输入密码:",20);
jf2.setFont(font);//设置统一的字体
//建立按钮
JButton jb1=new JButton("登录");
jb1.setFont(font);//设置统一的字体
JButton jb2=new JButton("退出");
jb2.setFont(font);//设置统一的字体
//将这些文本和按钮添加到JPanel对象中,然后再将JPanel对象添加到JFrame对象中去
jp.add(jl1);
jp.add(jf1);
jp.add(jl2);
jp.add(jf2);
jp.add(jb1);
jp.add(jb2);
frame.add(jp);
//让组件显示
frame.setVisible(true);
}
}
来源:https://blog.csdn.net/qq_62731133/article/details/124503403