JAVA基础 - 图形页面

news2024/11/13 15:41:08

目录

一. 简介

二. 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 布局创建一个包含按钮和文本区域的窗口:

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 方法,将监听器对象添加到组件。

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

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 类:

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 方法来处理鼠标点击事件,而无需为其他鼠标事件方法(如 mousePressed 、 mouseReleased 等)提供实现。

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

五. 布局管理

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

  1. FlowLayout(流式布局):
    • 组件按照从左到右的顺序排列,当一行排满后,会自动换行到下一行。
    • 示例代码:
    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)五个区域。
    • 每个区域只能放置一个组件,如果添加多个组件,只有最后添加的那个组件会显示。
    • 示例代码:
    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(网格布局):
    • 将容器划分为指定行数和列数的网格,组件按照从左到右、从上到下的顺序依次放入网格中。
    • 示例代码:
    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(箱式布局):

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

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

六. 可视化工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1965817.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全文最详细CPP/XCP标定协议讲解:命令传输对象CTO

全文最详细CPP/XCP标定协议讲解:命令传输对象CTO 1.概述 CTOs(命令传输对象)用于从主设备向从设备传输命令,以及从从设备向主设备传输响应。 命令结构: 从设备从主设备接收命令,并必须用肯定或否定的响应来做出反应,通信结构如下: 请求报文 每个命令都会被分配一个唯…

Temporal(时效)模式03

正如“问题”一节所说,如果有必要,我们不排除为Skill类提供一个类似的接口的可能性。由于使用 了《temporal》版型,“问题”一节中复杂的图变得简单多了(见图7)。 图7:使用版型后的Employee模型 效果 √ 我…

xAI 可能收购 Character.AI 以测试 Grok 聊天机器人

🦉 AI新闻 🚀 xAI 可能收购 Character.AI 以测试 Grok 聊天机器人 摘要:马斯克的人工智能初创公司 xAI 正考虑收购聊天机器人制造商 Character.AI,以测试其 Grok 聊天机器人。这种收购可能意在降低训练和运行 AI 模型的高昂成本…

浩瀚、西圣、博雅无线领夹麦克风值得买吗?深度测评三大热门品牌

​无线领夹麦克风是当下热门的音频工具,很多新用户不知买啥牌子,不了解销量口碑,选购易迷茫。作为音频设备测评博主,被问最多的是浩瀚、西圣、博雅等是否值得买。参考数据,口碑好的有西圣、猛犸、博雅等。西圣的认可度…

【北京仁爱堂】痉挛性斜颈一定不能吃的5种食物,好多患者都因此导致病情加重了!

痉挛性斜颈,作为一种神经系统疾病,其发病机制复杂,症状表现为颈部肌肉不自主收缩,导致头部偏向一侧,不仅影响患者的外貌形象,更严重地干扰了他们的日常生活与工作。在治疗与康复过程中,合理的饮…

新版绿豆视频APP视频免授权源码6.1版本_插件版

新版绿豆视频APP视频免授权源码插件版后端插件开源,可直接反编译修改方便,对接苹果CMS,自定义DIY页面布局! 绿豆影视APP对接苹果cms,所有页面皆可通过后端自由定制,此版本后端源码前端是壳(反编译版本)&am…

SpringBoot 中优化 if-else 语句的七种方法实战

SpringBoot 中优化 if-else 语句的七种方法实战 🚀 🔥 SpringBoot 中优化 if-else 语句的七种方法实战 🚀摘要引言正文内容1. 策略模式 🎯实战案例:支付功能 2. 枚举与策略模式结合 🔄实战案例:…

Kafka操作

目录 一、创建主题 二、查看主题 三、修改分区数 四、删除主题 五、生产数据 六、创建消费组 一、创建主题 --- kafka-topics.sh ---bootstrap-server 指定连接的kafka服务 - --create 创建主题 - --partitions 指定分区数 默认一个 - --replication-factor 指定分区中的…

中文竞技场大测评

中文竞技场大测评 活动入口大模型评测写作创作相关代码相关知识常识中文游戏人类价值观模型自动对话 体验感受 活动入口 这次的中文竞技场大模型评测活动,内容很有趣,包含了写作创作相关、代码相关、知识常识、中文游戏、人类价值观、NLP专业领域这6个领…

记录Maven打包Java web项目时提示webxml attribute is required

经各种搜索后发现每次打包web文件夹的映射,莫名其妙被改为webapp(不知道是idea还是Maven的锅) 直接把web文件夹改成webapp好了,,还是不要自定义web文件夹的名称了。真的栓Q ​​​​​​☞☜

程序员面试中的“八股文”:助力还是阻力?

目录 前言1. “八股文”的定义与起源1.1 “八股文”的历史背景1.2 “八股文”在程序员面试中的应用 2. “八股文”的优点与作用2.1 标准化评估工具2.2 强化基础知识2.3 短时间内展示能力 3. “八股文”的局限与争议3.1 忽视实际操作能力3.2 过度依赖背题能力3.3 压制创新思维 4…

声学气膜馆:优化听觉体验的创新之选—轻空间

随着现代建筑技术的不断进步,气膜建筑因其轻便、灵活、快速搭建等优势,在体育、娱乐、教育等多个领域得到广泛应用。然而,传统气膜馆在声学性能上的缺陷,特别是噪音问题,一直是使用过程中需要克服的挑战。为解决这一问…

【课程系列07】某乎AI大模型全栈工程师-第7期

网盘链接 链接:百度网盘 请输入提取码 --来自百度网盘超级会员v6的分享 课程目标 学习完毕咱们可以收获什么种能力: 1、传统前端 后端 数据分析 产品 绘图 算法工程等工作,一个人都可以实现,实现超级个体的能力 2、可以解决…

Bug 解决 | 无法正常登录或获取不到用户信息

目录 1、跨域问题 2、后端代码问题 3、前端代码问题 我相信登录这个功能是很多人做项目时候遇到第一个槛! 看起来好像很简单的登录功能,实际上还是有点坑的,比如明明账号密码都填写正确了,为什么登录后请求接口又说我没登录&a…

【微信小程序】java后端生成小程序链接跳转小程序

文章介绍:通过后端提供链接二维码,微信扫二维码请求后端,后端生成需要跳转的小程序链接 需要请求2个微信接口 1.获取微信access_token(我用了是我自己的httpUtil工具,细节就不提了,这个获取微信access_token是微信大…

【数据结构算法经典题目刨析(c语言)】环形链表的约瑟夫问题

💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:数据结构经典题目刨析(c语言) 一.前言: 前言——著名的Josephus问题 据说著名犹太 Josephus有过以下的故事:在罗⻢⼈占领乔塔帕特后,39个犹太⼈与Josephus及他…

C#初级——List 容器

容器 在C#中&#xff0c;容器通常指的是用于存储和组织数据的集合类。 本文介绍的容器是动态数组&#xff1a;List<T> 内部使用数组来存储元素&#xff0c;当添加元素超出当前数组容量时&#xff0c;会自动调整大小&#xff08;扩容&#xff09;。 list容器 List<&g…

【ARM】ArmDS中Coretex-M处理器GPIO时钟使能代码分析

1、 文档目标 了解ArmDS中Coretex-M处理器GPIO时钟使能代码&#xff0c;掌握GPIO时钟使能的流程及其依据。 2、 问题场景 在应用Coretex-M处理器进行项目开发时&#xff0c;GPIO的使用&#xff0c;是任何一个开发人员必须掌握的内容。 3、软硬件环境 1&#xff09;、软件版本…

vue项目Nginx部署启动

1.vue打包 &#xff08;1&#xff09;package.json增加打包命令 "scripts": {"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js --host 10.16.14.110","start": "npm run dev","un…

11部门公布第二批国家数字乡村试点地区名单

近日&#xff0c;中央网信办、农业农村部、国家发展改革委、工业和信息化部、民政部、生态环境部、商务部、文化和旅游部、中国人民银行、市场监管总局、国家数据局联合印发通知&#xff0c;公布第二批国家数字乡村试点地区名单&#xff08;附后&#xff09;&#xff0c;并对组…