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

标签:Java,GUI,创建窗体
0
投稿

猜你喜欢

  • flutter实现底部不规则导航栏

    2023-03-03 04:33:08
  • Java使用贪心算法解决电台覆盖问题(示例详解)

    2022-12-31 05:58:48
  • springboot2启动时执行,初始化(或定时任务)servletContext问题

    2022-10-18 13:14:30
  • Android实现LED发光字效果

    2021-09-14 21:58:12
  • 新手入门Jvm-- JVM对象创建与内存分配机制

    2021-11-04 19:28:10
  • Android中AlertDialog的六种创建方式

    2021-08-23 15:59:52
  • JSON 与对象、集合之间的转换的示例

    2021-12-04 20:08:58
  • JAVA使用hutool工具实现查询树结构数据(省市区)

    2021-11-04 18:30:09
  • Android SlidingDrawer 抽屉效果的实现

    2023-08-02 07:58:30
  • 使用Java和ffmpeg把音频和视频合成视频的操作方法

    2022-08-22 07:30:20
  • C#通过xpath查找xml指定元素的方法

    2023-06-22 11:55:29
  • java判断String类型是否能转换为int的方法

    2022-08-17 23:45:52
  • arthas排查jvm中CPU占用过高问题解决

    2022-07-15 20:31:49
  • java开源调度如何给xxljob加k8s执行器

    2021-09-17 16:41:50
  • Java常用流程控制语句实现原理解析

    2023-11-08 14:11:34
  • Java JDK 二分法 分析demo(推荐)

    2022-02-28 23:29:21
  • C#中的委托和事件详解

    2022-01-20 01:31:53
  • Android下使用TCPDUMP实现数据抓包教程

    2021-12-08 07:58:42
  • Android ViewPager2 使用及自定义指示器视图实现

    2022-06-16 09:35:26
  • 浅谈MyBatis中@MapKey的妙用

    2023-09-25 10:42:02
  • asp之家 软件编程 m.aspxhome.com