Java 图形用户界面

JFrame

JFrame是Java中用于创建图形用户界面(GUI)的顶级容器类

JFrame类是Swing库中的一个关键组件,它代表一个窗口,可以向其中添加各种GUI组件来构建应用程序的用户界面。以下是JFrame的一些基本用法和特性:

  • 创建JFrame对象:可以通过实例化JFrame类来创建一个窗口,并可以通过构造函数设置窗口的标题。例如,JFrame jf = new JFrame("我是标题鸭!!!"),或者在创建后使用setTitle()方法设置标题,如jf.setTitle("我是标题鸭!!!")
  • 设置窗体大小和位置:可以使用setSize()方法来设置窗体的宽度和高度,或者使用setBounds()方法来指定窗体的确切位置和大小。例如,jf.setSize(20,10)会设置一个20像素宽、10像素高的窗体,而jf.setBounds(1,2,20,10)会设置一个左上角顶点在屏幕坐标(1,2)的位置,宽度为20像素,高度为10像素的窗体。
  • 添加组件:JFrame包含一个名为JRootPane的唯一子容器,它又包含了一个内容窗格(content pane),通常应该将所有非菜单组件添加到这个内容窗格中。这与早期的AWT Frame有所不同,为了方便起见,JFrame重写了addremovesetLayout方法,使它们能够将调用委托给内容窗格的相应方法。
  • 设置默认关闭操作:可以使用setDefaultCloseOperation()方法来设置当用户关闭窗口时程序的行为。例如,jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)会设置当用户关闭窗口时,程序将终止运行。
  • 设置窗体可见性:通过调用setVisible(true)方法可以使窗体可见。在默认情况下,窗体是不可见的,只有在设置为可见后,用户才能在屏幕上看到它。

下面是一个简单的示例代码,演示了如何使用JFrame创建一个窗口: 

import javax.swing.*;public class MyWindow {public static void main(String[] args) {// 创建JFrame对象JFrame jf = new JFrame("我的窗口");// 设置窗体大小和位置jf.setSize(300, 200);jf.setLocation(100, 100);// 设置默认关闭操作jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置窗体可见性jf.setVisible(true);}
}

 

 GUI菜单组成

在Java的Swing库中,GUI菜单由以下组件组成:

JMenuBar:这是菜单栏的容器,它通常位于窗口的顶部。可以通过创建一个JMenuBar实例并将其设置为窗体的菜单栏来定义一个菜单栏。例如:

JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);

JMenu:这些是菜单栏中的单个菜单,如“文件”、“编辑”等。可以通过创建一个JMenu实例并将其添加到JMenuBar来创建菜单。例如:

JMenu fileMenu = new JMenu("文件");
menuBar.add(fileMenu);

JMenuItem:这些是菜单中的单个选项,用户可以通过它们执行操作。可以通过创建一个JMenuItem实例并将其添加到JMenu来创建菜单项。例如:

JMenuItem openItem = new JMenuItem("打开");
fileMenu.add(openItem);

JCheckBoxMenuItem:这是一种特殊类型的菜单项,它具有一个可以切换的复选框。例如:

JCheckBoxMenuItem checkItem = new JCheckBoxMenuItem("显示状态栏");
fileMenu.add(checkItem);

JRadioButtonMenuItem:这是一种特殊类型的菜单项,它具有一个单选按钮。例如:

JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem("选择颜色");
fileMenu.add(radioItem);

JPopupMenu:这是弹出菜单,当用户右键单击时出现。例如:

JPopupMenu popup = new JPopupMenu();
popup.add(new JMenuItem("复制"));
popup.add(new JMenuItem("粘贴"));
component.setComponentPopupMenu(popup);

JSeparator:这是一个用于分隔菜单项的视觉元素,通常用于改善菜单的可读性。例如:

JMenu menu = new JMenu("类型");
menu.add(new JMenuItem("水果"));
menu.add(new JSeparator());
menu.add(new JMenuItem("蔬菜"));

 

书写过程

Java GUI菜单代码书写步骤如下:

导入必要的包和类。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

创建主窗口类,继承JFrame类。

public class MainWindow extends JFrame {// 构造方法public MainWindow() {// 设置窗口标题setTitle("Java GUI菜单示例");// 设置窗口大小setSize(400, 300);// 设置窗口关闭操作setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 创建菜单栏JMenuBar menuBar = new JMenuBar();// 创建菜单JMenu fileMenu = new JMenu("文件");JMenu editMenu = new JMenu("编辑");// 创建菜单项JMenuItem openItem = new JMenuItem("打开");JMenuItem saveItem = new JMenuItem("保存");JMenuItem copyItem = new JMenuItem("复制");JMenuItem pasteItem = new JMenuItem("粘贴");// 将菜单项添加到菜单中fileMenu.add(openItem);fileMenu.add(saveItem);editMenu.add(copyItem);editMenu.add(pasteItem);// 将菜单添加到菜单栏中menuBar.add(fileMenu);menuBar.add(editMenu);// 将菜单栏添加到窗口中setJMenuBar(menuBar);}
}

在主函数中创建主窗口对象并显示。

public static void main(String[] args) {MainWindow mainWindow = new MainWindow();mainWindow.setVisible(true);
}

这样就完成了一个简单的Java GUI菜单代码的书写。

 

ImageIcon

ImageIcon是Java Swing库中用于表示图像图标的类,它允许开发者在Swing组件中显示图像

ImageIcon类是Icon接口的一个实现,它使用图片来绘制图标。这个类提供了多个构造函数,可以从不同的来源创建ImageIcon对象:

  • 从文件名创建:通过提供一个文件名,ImageIcon可以加载该文件中的图像并创建一个图标。例如,ImageIcon("path/to/image.jpg")会从指定路径加载图像文件。
  • 从URL创建:如果图像位于网络上,可以通过提供URL来创建ImageIcon。例如,ImageIcon(new URL("http://example.com/image.jpg"))
  • 从字节数组创建:如果图像数据以字节数组的形式存在,可以使用这个构造函数来创建ImageIcon。例如,ImageIcon(byteArray),其中byteArray包含了图像的字节数据。
  • 从Image对象创建:如果已经有了一个java.awt.Image对象,可以直接用它来创建一个ImageIcon。例如,ImageIcon(image),其中image是一个Image对象。

使用ImageIcon可以方便地将图像添加到Swing组件中,例如JLabel、JButton等。以下是一个简单的示例:

import javax.swing.*;
import java.awt.*;public class ImageIconExample {public static void main(String[] args) {JFrame frame = new JFrame("ImageIcon示例");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300, 200);// 创建一个ImageIcon对象并指定图片路径ImageIcon icon = new ImageIcon("path/to/your/image.jpg");// 将ImageIcon添加到JLabel中JLabel label = new JLabel(icon);// 将JLabel添加到JFrame中frame.add(label);frame.setVisible(true);}
}

在这个示例中,我们创建了一个ImageIcon对象,并将其添加到一个JLabel中。然后,我们将JLabel添加到JFrame中,并设置窗口的大小和关闭操作。最后,我们调用setVisible(true)方法使窗口可见。

动作监听事件 ActionListener  

Java动作监听事件是指在Java程序中,当用户执行某个动作(如点击按钮、选择菜单项等)时,触发的事件处理机制。在Java中,我们通常使用事件监听器(Event Listener)来处理这些事件。

以下是一个简单的Java动作监听事件示例:

首先,我们需要创建一个实现了ActionListener接口的类,该接口包含一个名为actionPerformed的方法,该方法将在事件发生时被调用。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class MyActionListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("按钮被点击了!");}
}

然后,我们需要创建一个按钮(JButton),并将我们的事件监听器添加到该按钮上。

import javax.swing.JButton;
import javax.swing.JFrame;public class Main {public static void main(String[] args) {// 创建一个窗口JFrame frame = new JFrame("Java动作监听事件示例");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300, 200);// 创建一个按钮JButton button = new JButton("点击我");// 创建一个事件监听器实例MyActionListener listener = new MyActionListener();// 将事件监听器添加到按钮上button.addActionListener(listener);// 将按钮添加到窗口中frame.getContentPane().add(button);// 显示窗口frame.setVisible(true);}
}

运行上述代码,将会显示一个包含一个按钮的窗口。当我们点击按钮时,控制台将输出“按钮被点击了!”。

鼠标监听事件 MouseListener

Java中的鼠标监听事件是通过实现MouseListener接口来处理的。这个接口包含了几个重要的方法,用于响应不同的鼠标操作:

  • mouseEntered(MouseEvent e):当鼠标移入组件时调用。
  • mouseExited(MouseEvent e):当鼠标移出组件时调用。
  • mousePressed(MouseEvent e):当鼠标按钮被按下时调用。
  • mouseReleased(MouseEvent e):当鼠标按钮被释放时调用。

此外,如果需要更详细的鼠标跟踪,如鼠标的移动,可以实现MouseMotionListener接口,它提供了mouseMoved和mouseDragged两个方法。

在实际应用中,通常会看到MouseAdapter类的使用,它是一个抽象适配器类,实现了MouseListener和MouseMotionListener接口的所有方法,但所有方法都是空实现。这样做的目的是允许我们只重写我们关心的方法,而不是所有的鼠标事件方法,从而减少代码量并提高可读性。

以下是一个简单的Java鼠标监听事件示例代码:

import java.awt.*;
import java.awt.event.*;public class MouseListenerExample extends Frame implements MouseListener {Label label;public MouseListenerExample() {setLayout(new FlowLayout());label = new Label("Click me!");add(label);addMouseListener(this); // 添加鼠标监听器setSize(300, 200);setVisible(true);}// 实现MouseListener接口的方法public void mouseClicked(MouseEvent e) {label.setText("Mouse clicked at (" + e.getX() + ", " + e.getY() + ")");}public void mouseEntered(MouseEvent e) {label.setText("Mouse entered");}public void mouseExited(MouseEvent e) {label.setText("Mouse exited");}public void mousePressed(MouseEvent e) {label.setText("Mouse pressed");}public void mouseReleased(MouseEvent e) {label.setText("Mouse released");}public static void main(String[] args) {new MouseListenerExample();}
}

这个例子创建了一个包含一个标签的窗口,并实现了MouseListener接口。当鼠标在窗口内进行操作时,标签会显示相应的信息。

 

键盘监听事件 KeyListener  

在Java中,键盘监听事件是通过实现KeyListener接口来处理的。这个接口定义了三个方法,用于响应不同的键盘操作:

  • keyTyped(KeyEvent e):当按下并释放一个键时调用。这个方法可以识别大多数键,但某些特殊键(如功能键)可能无法识别。

  • keyPressed(KeyEvent e):当按下一个键时调用。这个方法可以识别所有键,包括特殊键。

  • keyReleased(KeyEvent e):当释放一个键时调用。

要使用键盘监听,你需要创建一个实现了KeyListener接口的类或直接实现这些方法,然后将这个类的实例添加到你想要监听的组件上。通常,我们会将键盘监听器添加到JFrameJPanel或其他容器组件上。

以下是一个简单的Java键盘监听事件示例:

import javax.swing.*;
import java.awt.event.*;public class KeyListenerExample extends JFrame implements KeyListener {private JLabel label;public KeyListenerExample() {label = new JLabel("Press a key");label.setHorizontalAlignment(JLabel.CENTER);add(label);setSize(400, 300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null);setVisible(true);addKeyListener(this); // 添加键盘监听器}@Overridepublic void keyTyped(KeyEvent e) {label.setText("Key typed: " + e.getKeyChar());}@Overridepublic void keyPressed(KeyEvent e) {label.setText("Key pressed: " + e.getKeyChar());}@Overridepublic void keyReleased(KeyEvent e) {label.setText("Key released: " + e.getKeyChar());}public static void main(String[] args) {SwingUtilities.invokeLater(() -> new KeyListenerExample());}
}

在这个例子中,我们创建了一个JFrame窗口,并添加了一个JLabel标签来显示键盘事件的信息。我们实现了KeyListener接口的所有方法,并将这个类的实例添加到JFrame上。运行程序后,当你在窗口内按下、释放或键入字符时,标签会更新显示相应的信息。

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

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

相关文章

240330-大模型资源-使用教程-部署方式-部分笔记

A. 大模型资源 Models - Hugging FaceHF-Mirror - Huggingface 镜像站模型库首页 魔搭社区 B. 使用教程 HuggingFace HuggingFace 10分钟快速入门(一),利用Transformers,Pipeline探索AI。_哔哩哔哩_bilibiliHuggingFace快速入…

ChatGPT引领学术风潮:写作技巧与实践

ChatGPT无限次数:点击直达 ChatGPT引领学术风潮:写作技巧与实践 引言 在当今信息爆炸的时代,各行各业对于内容创作的需求日益增长,人们追求更高效、更优质的写作工具。ChatGPT作为一款具有自我学习和生成文本能力的先进AI技术,成…

【计算机视觉】四篇基于Gaussian Splatting的SLAM论文对比

本文对比四篇论文: [1] Gaussian Splatting SLAM [2] SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM [3] Gaussian-SLAM: Photo-realistic Dense SLAM with Gaussian Splatting [4] GS-SLAM: Dense Visual SLAM with 3D Gaussian Splatting …

汇编语言——用INT 21H 的A号功能,输入一个字符串存放在内存,倒序输出

用INT 21H 的A号功能,输入一个字符串“Hello, world!”,存放在内存,然 后倒序输出。 在DOS中断中,INT 21H是一个常用的系统功能调用中断,它提供了多种功能,其中A号功能用于字符串的输入。 在使用这个功能时…

高级排序算法:归并排序(优化版)

题目描述 leecode第912题:排序数组: 给你一个整数数组 nums,请你将该数组升序排列。 示例 1: 输入:nums [5,2,3,1] 输出:[1,2,3,5]示例 2: 输入:nums [5,1,1,2,0,0] 输出&…

【PSINS工具箱】基于工具箱,自己设计的轨迹,并生成IMU数据和三维视图(完整代码)

完整代码 在有工具箱的情况下,直接运行代码,即可 % 基于PSINS工具箱的三维轨迹生成、三维图像绘制与IMU数据生成 % date:2024-2-13 % Evand(evandworldqq.com) % Ver1 clear;clc;close all; glvs ts 0.1; % sampling int…

RuntimeError: CUDA error: an illegal memory access was encountered

前言 我在跑深度学习模型。其中卷积用CUDA写的。数据集是cifar10。在运行了1个epoch后,就报错:RuntimeError: CUDA error: an illegal memory access was encountered。这个错误是在调用loss.backward()方法时出现的。 在网上看了很多方法,有…

linux自定义命令

文章目录 1、自定义命令介绍2、自定义命令步骤 (centos7)2.1 新建隐藏目录存放自定义命令脚本文件2.2 将新建的目录配置环境变量2.3 取别名的方式简化已有命令2.4 编写自定义命令脚本 1、自定义命令介绍 不管是linux系统还是windows系统都支持自定义命令,windows端…

学习 C++ 一定要搭配 Linux 吗?

学习C并不一定非要搭配Linux,但使用Linux环境进行学习和开发确实有其独特的优势,尤其对于深入理解和实践某些高级主题及特定领域的开发工作。以下是关于是否需要搭配Linux学习C的详细分析: 为了帮助您更好地入门并深入掌握C,我们精…

PLC的大脑和心脏——CPU及西门子S7-1200CPU分类、CPU型号及端子接线图示例

CPU不断地采集输入信号,执行用户程序,刷新系统的输出。 根据供电方式和输入/输出方式的不同,西门子S7-1200 CPU分为3类,如下图1。 图1 CPU的分类 第1对字母,表示CPU的供电方式,AC(Alternating…

Python实现的网页爬虫示例

当然可以。以下是一个使用Python实现的基础网页爬虫示例。这个示例将使用requests库来发送HTTP请求,并使用BeautifulSoup库来解析HTML文档。如果你还没有安装这两个库,请先使用pip进行安装: pip install requests beautifulsoup4接下来是网页…

代码随想录第25天|216.组合总和III 17.电话号码的字母组合

216.组合总和III 216. 组合总和 III - 力扣(LeetCode) 代码随想录 (programmercarl.com) 和组合问题有啥区别?回溯算法如何剪枝?| LeetCode:216.组合总和III_哔哩哔哩_bilibili 找出所有相加之和为 n 的 k 个数的组…

【KingSCADA】播放语音

1.函数介绍 PlaySound(string strWaveFileName, int nMode);下面是官方帮助文档中的解释: 2.生成语音文件 3.使用脚本播放音频文件 将音频文件存放在工程目录下面,我存放在了…\Resources\文件夹下: 我简单的写了一个定时1分钟播放一次语…

Fluent循环流动案例(模拟循环泵,含换热、散热、VOF、UDF)

在此特意记录下循环通道的fluent思路和参数设置 该案例中,主要关注的是催化剂域的温度变化情况,因此需要监控的是温度的变化曲线,关于泵如何进行模拟,这里有两种思路,一种是用风扇代替泵,优点是整个流体域基…

HarmonyOS ArkTS 骨架屏加载显示(二十五)

目录 前言1、骨架屏代码显示2、代码中引用3、效果图展示 前言 所谓骨架屏,就是在页面进行耗时加载时,先展示的等待 UI, 以告知用户程序目前正在运行,稍等即可。 等待的UI大部分是 loading 转圈的弹窗,有的是自己风格的小动画。其实…

JS - const 关键字声明的变量并不是常量

// 1. 赋值给一个变量 const declare function (x) { return x * x; }; 读到这部分时‘ 疑惑注释为什么会是说 把这个函数表达式赋值给一个变量 在 JavaScript 中,使用 const 关键字声明的变量并不是常量(immutable),而是常量引用…

vue3路由跳转

在 Vue 3 中,路由跳转通常是通过 Vue Router 实现的。Vue Router 是 Vue.js 官方的路由管理器,它和 Vue.js 深度集成,使构建单页面应用变得易如反掌。 下面是一些在 Vue 3 中使用 Vue Router 进行路由跳转的基本步骤: 安装 Vue …

武汉大学开设 “雷军班”:计算机专业、今年招收 15 名本科生。武汉大学已经联合小米成立了机器系

更多精彩内容在公众号。 3月25日,武汉大学官方网站发布了一则新闻,报道了校长张平文对计算机学院的调研活动。在报道中,张平文校长特别强调了关于“雷军班”及机器人系的发展规划。他表示,希望计算机学院能够立足于更高层次&#…

【python从入门到精通】-- 第三战:输入输出 运算符

🌈 个人主页:白子寰 🔥 分类专栏:python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ 💡 坚持创作博文…

前端虚拟滚动列表 vue虚拟列表

前端虚拟滚动列表 在大型的企业级项目中经常要渲染大量的数据,这种长列表是一个很普遍的场景,当列表内容越来越多就会导致页面滑动卡顿、白屏、数据渲染较慢的问题;大数据量列表性能优化,减少真实dom的渲染 看图:绿色…