JAVA基础 - 图形页面

目录

[一. 简介](#一. 简介)

[二. Swing 技术基础](#二. Swing 技术基础)

[三. 事件处理模型](#三. 事件处理模型)

[四. 适配器](#四. 适配器)

[五. 布局管理](#五. 布局管理)

[六. 可视化工具](#六. 可视化工具)


一. 简介

Java 图形用户界面技术主要有: AWT 、 Applet 、 Swing和 JavaFX 。

AWT(Abstract Window Toolkit,抽象窗口工具包)

AWT 是 Java 最早的用于创建图形用户界面(GUI)的工具包。它提供了基本的窗口、按钮、文本框等组件。然而,AWT 的组件依赖于本地操作系统的原生组件,这导致了界面在不同操作系统上可能会有外观和行为的差异,并且在一些情况下性能不是很好。

Applet

Applet 是一种可以嵌入到网页中的 Java 程序。它通过浏览器运行,能够与用户进行交互,并执行一些简单的任务。但由于安全限制和浏览器技术的发展,Applet 的使用已经逐渐减少。

Swing

Swing 是建立在 AWT 之上的一套更强大和灵活的 GUI 工具包。Swing 组件不依赖于本地操作系统的原生组件,而是由 Java 自己绘制,因此具有更好的跨平台一致性和可定制性。Swing 提供了丰富的组件,如各种按钮、文本域、列表、表格等,并且支持自定义组件的外观和行为。

JavaFX

JavaFX 是 Java 平台上较新的用于创建富客户端应用程序的图形和多媒体框架。它具有更现代化的设计和更强大的功能,支持 2D 和 3D 图形、动画、多媒体等。JavaFX 的组件和布局方式更加灵活和易于使用,并且与现代的开发理念和技术更加契合。

二. Swing 技术基础

Swing 是 Java 中用于构建图形用户界面(GUI)的一套工具库。

Swing 的特点

  1. 跨平台性:可以在不同操作系统上保持相似的外观和行为。
  2. 丰富的组件:提供了多种组件满足各种界面需求。

容器组件

  1. JFrame:顶层窗口容器,通常作为应用程序的主窗口。可以设置大小、位置、标题等属性。
  2. JPanel:通用的面板容器,用于组织和分组其他组件。
  3. JScrollPane:当组件内容超出显示区域时,提供滚动条。

常用组件

  1. JButton:按钮,可响应点击事件。
  2. JTextField:单行文本输入框。
  3. JTextArea:多行文本输入区域。
  4. JLabel:用于显示文本或图像的标签。
  5. JCheckBox:复选框。
  6. JRadioButton:单选按钮。
  7. JComboBox:下拉列表框。

布局管理器

用于管理容器内组件的排列方式,常见的有:

  1. FlowLayout:组件按照从左到右的顺序排列,满一行后换行。
  2. BorderLayout:将容器分为东、西、南、北和中心五个区域。
  3. GridLayout:以网格形式排列组件。

例如,使用 BorderLayout 布局创建一个包含按钮和文本区域的窗口:

java 复制代码
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class SwingExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Swing Example");
        frame.setLayout(new BorderLayout());

        JButton button = new JButton("Click Me");
        frame.add(button, BorderLayout.NORTH);

        JTextArea textArea = new JTextArea();
        frame.add(textArea, BorderLayout.CENTER);

        frame.setSize(400, 300);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

总之,Swing 提供了丰富的功能和组件,通过合理选择容器、组件和布局管理器,可以创建出功能丰富、界面友好的图形界面应用程序。

三. 事件处理模型

在 Java 的 Swing 中,事件处理模型用于处理用户与界面组件的交互操作所产生的事件。

事件源:产生事件的组件,如按钮、文本框等。

事件:用户操作(如点击按钮、输入文本等)所触发的对象,表示发生的具体事情。

事件监听器:用于监听特定类型事件的接口实现。

Swing 中的事件处理通常遵循以下步骤:

  1. 定义事件监听器接口的实现类,实现相应的方法来处理事件。

    • 例如,对于按钮的点击事件,可以实现 ActionListener 接口。
  2. 将事件监听器注册到事件源上。

    • 通过组件的 addXXXListener 方法,将监听器对象添加到组件。

下面是一个简单的示例,展示了如何处理按钮的点击事件:

java 复制代码
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class EventHandlingExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Event Handling");
        JButton button = new JButton("Click Me");

        // 创建事件监听器对象
        ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("Button clicked!");
            }
        };

        // 将监听器注册到按钮
        button.addActionListener(listener);

        frame.add(button);
        frame.setSize(300, 200);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

在上述示例中,创建了一个匿名内部类作为 ActionListener 的实现,当按钮被点击时,会输出相应的消息。

除了 ActionListener ,Swing 还提供了许多其他的事件监听器接口,如 MouseListener (处理鼠标事件)、KeyListener (处理键盘事件)等,以满足不同类型的交互需求。

四. 适配器

在 Java 的 Swing 事件处理中,有时可能不需要实现事件监听器接口中的所有方法,这时可以使用适配器类。

适配器类是为事件监听器接口提供的空实现类。通过继承适配器类,只需要重写实际需要处理的事件方法,而无需为接口中的其他方法提供空实现。

例如,对于鼠标事件监听器 MouseListener,可以使用 MouseAdapter 类:

java 复制代码
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class AdapterExample extends JFrame {

    public AdapterExample() {
        JPanel panel = new JPanel();

        panel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("鼠标点击");
            }
        });

        add(panel);

        setSize(400, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        new AdapterExample();
    }
}

在上述示例中,通过继承 MouseAdapter 类并只重写 mouseClicked 方法来处理鼠标点击事件,而无需为其他鼠标事件方法(如 mousePressedmouseReleased 等)提供实现。

类似的,对于其他事件监听器接口,如 KeyAdapter 用于键盘事件、 WindowAdapter 用于窗口事件等,也可以采用相同的方式来简化事件处理代码。

五. 布局管理

在 Java 的 Swing 中,布局管理器用于控制组件在容器中的排列方式和位置。以下是一些常见的布局管理器:

  1. FlowLayout(流式布局):
    • 组件按照从左到右的顺序排列,当一行排满后,会自动换行到下一行。
    • 示例代码:
java 复制代码
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import java.awt.FlowLayout;

    public class FlowLayoutExample {
        public static void main(String[] args) {
            JFrame frame = new JFrame("FlowLayout Example");
            frame.setLayout(new FlowLayout());

            JButton button1 = new JButton("Button 1");
            JButton button2 = new JButton("Button 2");
            JButton button3 = new JButton("Button 3");

            frame.add(button1);
            frame.add(button2);
            frame.add(button3);

            frame.setSize(300, 200);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
  1. BorderLayout(边界布局):
    • 将容器划分为东(EAST)、西(WEST)、南(SOUTH)、北(NORTH)和中(CENTER)五个区域。
    • 每个区域只能放置一个组件,如果添加多个组件,只有最后添加的那个组件会显示。
    • 示例代码:
java 复制代码
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import java.awt.BorderLayout;

    public class BorderLayoutExample {
        public static void main(String[] args) {
            JFrame frame = new JFrame("BorderLayout Example");
            frame.setLayout(new BorderLayout());

            JButton northButton = new JButton("North");
            JButton southButton = new JButton("South");
            JButton eastButton = new JButton("East");
            JButton westButton = new JButton("West");
            JButton centerButton = new JButton("Center");

            frame.add(northButton, BorderLayout.NORTH);
            frame.add(southButton, BorderLayout.SOUTH);
            frame.add(eastButton, BorderLayout.EAST);
            frame.add(westButton, BorderLayout.WEST);
            frame.add(centerButton, BorderLayout.CENTER);

            frame.setSize(300, 200);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
  1. GridLayout(网格布局):
    • 将容器划分为指定行数和列数的网格,组件按照从左到右、从上到下的顺序依次放入网格中。
    • 示例代码:
java 复制代码
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import java.awt.GridLayout;

    public class GridLayoutExample {
        public static void main(String[] args) {
            JFrame frame = new JFrame("GridLayout Example");
            frame.setLayout(new GridLayout(3, 2));  // 3 行 2 列

            JButton button1 = new JButton("Button 1");
            JButton button2 = new JButton("Button 2");
            JButton button3 = new JButton("Button 3");
            JButton button4 = new JButton("Button 4");
            JButton button5 = new JButton("Button 5");
            JButton button6 = new JButton("Button 6");

            frame.add(button1);
            frame.add(button2);
            frame.add(button3);
            frame.add(button4);
            frame.add(button5);
            frame.add(button6);

            frame.setSize(300, 200);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
  1. CardLayout(卡片布局):

    • 可以将多个组件层叠放置,每次只显示其中一个组件,通过切换来显示不同的组件。
    • 常用于实现选项卡式的界面。
  2. BoxLayout(箱式布局):

    • 按照水平或垂直方向排列组件,可以设置组件之间的间距。

选择合适的布局管理器取决于具体的界面设计需求。有时也可以结合使用多个容器,并为每个容器设置不同的布局管理器,以实现更复杂的界面布局。

六. 可视化工具

相关推荐
The Future is mine27 分钟前
Python计算经纬度两点之间距离
开发语言·python
Enti7c28 分钟前
HTML5和CSS3的一些特性
开发语言·css3
腥臭腐朽的日子熠熠生辉34 分钟前
解决maven失效问题(现象:maven中只有jdk的工具包,没有springboot的包)
java·spring boot·maven
爱吃巧克力的程序媛35 分钟前
在 Qt 创建项目时,Qt Quick Application (Compat) 和 Qt Quick Application
开发语言·qt
ejinxian36 分钟前
Spring AI Alibaba 快速开发生成式 Java AI 应用
java·人工智能·spring
杉之41 分钟前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
圈圈编码1 小时前
Spring Task 定时任务
java·前端·spring
俏布斯1 小时前
算法日常记录
java·算法·leetcode
独好紫罗兰1 小时前
洛谷题单3-P5719 【深基4.例3】分类平均-python-流程图重构
开发语言·python·算法
27669582921 小时前
美团民宿 mtgsig 小程序 mtgsig1.2 分析
java·python·小程序·美团·mtgsig·mtgsig1.2·美团民宿