swing快速入门(二十七)
注释很详细,直接上代码
上一篇
新增内容
1.为按钮指定图标
2. 列表框的并列
3.菜单项绑定快捷键
4.控件悬浮提示信息
5.菜单项设置小图标
6.五种布局风格右键选择切换
package swing21_30;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;public class swing_test_25 {JFrame frame = new JFrame("swing测试");//定义一个按钮,并为其指定图标Icon okIcon = new ImageIcon("img/ok.png");JButton ok = new JButton("确定",okIcon);//定义一个单选按钮,初始处于选中的状态JRadioButton male = new JRadioButton("男",true);//定义一个单选按钮,初始处于未选中状态JRadioButton female = new JRadioButton("女",false);//定义一个ButtonGroup,把male和female组合起来,实现单选ButtonGroup buttonGroup = new ButtonGroup();//定义一个复选框,初始处于没有选中状态JCheckBox married = new JCheckBox("是否已婚?",false);//定义一个数组存储颜色String[] colors = { "红色", "绿色 " , "蓝色 " };//定义一个下拉选择框,展示颜色JComboBox<String> colorChooser = new JComboBox<String>(colors);//定一个列表框,展示颜色JList<String> colorList = new JList<String>(colors);//定义一个8行20列的多行文本域JTextArea textArea = new JTextArea(8,20);//定义一个40列的单行文本域JTextField name = new JTextField(40);//定义菜单条JMenuBar menuBar = new JMenuBar();//定义菜单JMenu file = new JMenu("文件");JMenu edit = new JMenu("编辑");//创建菜单项,并指定图标JMenuItem newItem = new JMenuItem("新建",new ImageIcon("img/new.png"));JMenuItem saveItem = new JMenuItem("保存",new ImageIcon("img/save.png"));JMenuItem exitItem = new JMenuItem("退出",new ImageIcon("img/exit.png"));JCheckBoxMenuItem autoWrap = new JCheckBoxMenuItem("自动换行");JMenuItem copyItem = new JMenuItem("复制",new ImageIcon("img/copy.png"));JMenuItem pasteItem = new JMenuItem("粘贴",new ImageIcon("img/paste.png"));//定义二级菜单,将来会添加到编辑中JMenu format = new JMenu("格式");JMenuItem commentItem = new JMenuItem("注释");JMenuItem cancelItem = new JMenuItem("取消注释");//定义一个右键菜单,用于设置程序的外观风格JPopupMenu pop = new JPopupMenu();//定义一个ButtongGroup对象,用于组合风格按钮,形成单选ButtonGroup flavorGroup = new ButtonGroup();//定义五个单选按钮菜单项,用于设置程序风格JRadioButtonMenuItem metalItem = new JRadioButtonMenuItem("Metal 风格",true);JRadioButtonMenuItem nimbusItem = new JRadioButtonMenuItem("Nimbus 风格",true);JRadioButtonMenuItem windowsItem = new JRadioButtonMenuItem("Windows 风格",true);JRadioButtonMenuItem classicItem = new JRadioButtonMenuItem("Windows 经典风格",true);JRadioButtonMenuItem motifItem = new JRadioButtonMenuItem("Motif 风格",true);//初始化界面public void init(){//----------------------组合主区域------------------------//创建一个装载文本框和按钮的JPanelJPanel bottom = new JPanel();bottom.add(name);bottom.add(ok);frame.add(bottom, BorderLayout.SOUTH);//创建一个装载下拉选择框、三个JChekBox的JPanelJPanel checkPanel = new JPanel();checkPanel.add(colorChooser);buttonGroup.add(male);buttonGroup.add(female);checkPanel.add(male);checkPanel.add(female);checkPanel.add(married);//创建一个垂直排列的Box,装载checkPanel和多行文本域Box topLeft = Box.createVerticalBox();//使用JScrollPane作为普通组件的JViewPortJScrollPane taJsp = new JScrollPane(textArea);topLeft.add(taJsp);topLeft.add(checkPanel);//创建一个水平排列的Box,装载topLeft和colorListBox top = Box.createHorizontalBox();top.add(topLeft);top.add(colorList);//将top Box 添加到窗口的中间frame.add(top);//---------------------------组合菜单条----------------------------------------------//为newItem添加快捷键 ctrl+NnewItem.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_MASK));newItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {textArea.append("用户点击了“新建”菜单\n");}});//为file添加菜单项file.add(newItem);file.add(saveItem);file.add(exitItem);//为edit添加菜单项edit.add(autoWrap);edit.addSeparator();edit.add(copyItem);edit.add(pasteItem);//为commentItem添加提示信息commentItem.setToolTipText("将程序代码注释起来");//为format菜单添加菜单项format.add(commentItem);format.add(cancelItem);//给edit添加一个分隔符edit.addSeparator();//把format添加到edit中形成二级菜单edit.add(format);//把edit file 添加到菜单条中menuBar.add(file);menuBar.add(edit);//把菜单条设置给窗口frame.setJMenuBar(menuBar);flavorGroup.add(metalItem);flavorGroup.add(nimbusItem);flavorGroup.add(windowsItem);flavorGroup.add(classicItem);flavorGroup.add(motifItem);//给5个风格菜单创建事件监听器ActionListener flavorLister = new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String command = e.getActionCommand();try {changeFlavor(command);} catch (Exception e1) {e1.printStackTrace();}}};//为5个风格菜单项注册监听器metalItem.addActionListener(flavorLister);nimbusItem.addActionListener(flavorLister);windowsItem.addActionListener(flavorLister);classicItem.addActionListener(flavorLister);motifItem.addActionListener(flavorLister);pop.add(metalItem);pop.add(nimbusItem);pop.add(windowsItem);pop.add(classicItem);pop.add(motifItem);//调用textArea组件的setComponentPopupMenu即可设置右键菜单,无需使用事件textArea.setComponentPopupMenu(pop);// 设置关闭窗口时推出程序frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置jFrame最佳大小并可见frame.pack();frame.setVisible(true);}//定义一个方法,用于改变界面风格private void changeFlavor(String command) throws Exception{switch (command){case "Metal 风格":UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");break;case "Nimbus 风格":UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");break;case "Windows 风格":UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");break;case "Windows 经典风格":UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");break;case "Motif 风格":UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");break;}//更新窗口内顶级容器以及所有组件的UISwingUtilities.updateComponentTreeUI(frame.getContentPane());//更新mb菜单条及每部所有组件UISwingUtilities.updateComponentTreeUI(menuBar);//更新右键菜单及内部所有菜单项的UISwingUtilities.updateComponentTreeUI(pop);}public static void main(String[] args) {//创建窗口new swing_test_25().init();}}
效果演示:




素材链接:
img-blog.csdnimg.cn/direct/e2ba782862f64694af460841dbb86bb5.png

img-blog.csdnimg.cn/direct/5e09d28a6caf416d82145600077152e7.png

img-blog.csdnimg.cn/direct/de7ff1de40f84947a7e8a454e4096dcc.png

img-blog.csdnimg.cn/direct/8ea757b4c350484eb7dfa0ef265ea634.png

相关文章:
swing快速入门(二十七)
注释很详细,直接上代码 上一篇 新增内容 1.为按钮指定图标 2. 列表框的并列 3.菜单项绑定快捷键 4.控件悬浮提示信息 5.菜单项设置小图标 6.五种布局风格右键选择切换 package swing21_30;import javax.swing.*; import java.awt.*; import java.awt.event.…...
Vue 封装echarts柱状图(Bar)组件
目的:减少重复代码,便于维护 显示效果 组件代码 <template><div class"ldw-data-content-box"><div class"ldw-chilren-box"><div class"title" v-if"title">{{ title }}</div>…...
异常(Java)
1.异常的概念 在 Java 中,将程序执行过程中发生的不正常行为称为异常 。 1.算数异常 System.out.println(10 / 0); // 执行结果 Exception in thread "main" java.lang.ArithmeticException: / by zero 2.数组越界异常 int[] arr {1, 2, 3}; System.out.…...
vue的插槽解析
插槽 好处:组件的内容结构可定制 用slot插槽进行占位 语法: 子组件中通过slot进行占位 理解:父组件,在子组件标签嵌套的内容就会被渲染到slot地方 一、默认插槽 //子组件 <slot>slot插槽</slot> //方法一<slot name"…...
Spring(3)Spring从零到入门 - Spring整合技术及AOP事务管理
Spring(3)Spring从零到入门 - Spring整合技术及AOP事务管理 文章目录 Spring(3)Spring从零到入门 - Spring整合技术及AOP事务管理4 Spring整合技术示例4.1 Spring整合Mybatis4.1.1 Mybatis开发回顾4.1.2 整合Spring分析4.1.3 Spri…...
适配器模式学习
适配器模式(Adapter)将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式分为类适配器模式和对象适配器模式两种,前者类之间的耦合度比后者高,且要…...
NET中使用Identity+CodeFirst+Jwt实现登录、鉴权
目录 前言 一、创建上下文类 1.自定义MyContext上下文类继承IdentityDbContext 2.在Program中添加AddDbContext服务 二、使用Migration数据迁移 1.在控制台中 依次使用add-migration 、updatebase 命令 2.如何修改表名 3.如何自定义字段 三、使用Identity实现登录、修改密码 …...
详解Keras3.0 API: Optimizers
Optimizers 优化器(Optimizer)是深度学习中用于更新模型参数的一种方法,它的目标是最小化损失函数。在训练神经网络时,我们通常使用梯度下降法来更新参数,而优化器就是实现这一过程的工具。优化器的主要作用是在每次迭…...
【数据结构】字符串匹配|BF算法|KMP算法|next数组的优化
字符串匹配算法是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目,本文主要介绍BF算法(最好想到的算法,也最好实现)和KMP算法(最经典的) 一、BF算法 BF算法,即暴力(Bru…...
阿里云 ACK One 新特性:多集群网关,帮您快速构建同城容灾系统
云布道师 近日,阿里云分布式云容器平台 ACK One[1]发布“多集群网关”[2](ACK One Multi-cluster Gateways)新特性,这是 ACK One 面向多云、多集群场景提供的云原生网关,用于对多集群南北向流量进行统一管理。 基于 …...
vscode自定义代码片段
前言 代码片段,指的是能够帮助输入重复代码模式,比如初始页面的模板。通过 snippet ,我们仅仅输入一小段字符串,就可以在代码片引擎的帮助下,生成预定义的模板代码,接着我们还可以通过在预定义的光标位置之…...
【贪心算法】专题练习一
欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 前言 1.什么是贪心算法?——贪婪鼠目寸光 贪心策…...
【JMeter】使用nmon进行性能资源监控
一、前言 在工作中可能会遇到需要在压测的时候对Linux服务器进行性能资源监控的情况。这时可以用nmon来对服务器进行监控。 二、nmon的下载安装 1.查看系统信息 shell cat /etc/os-release 结果为 shell PRETTY_NAME"Debian GNU/Linux 12 (bookworm)" NAME&…...
Unity预设体
目录 预设体是什么? 如何创建预设体? 如何修改预设体? 如何删除预设体? 预设体是什么? Unity中的预设体(Prefab)是一种可重复使用的游戏对象模板。它允许开发者创建一个或多个游戏对象&…...
Elasticsearch 写入优化探索:是什么影响了refresh 耗时?
1、问题背景: 数据写入后,refresh耗时过长,能达到1s-5s。 想通过测试,探索确认影响refresh的因素,比如:写入操作是新增还是更新,deleted文档占比是否有影响,是否有其他索引配置&…...
Java8新特性——函数式接口
目录 一、介绍 二、示例 (一)Consumer 源码解析 测试示例 (二)Comparator (三)Predicate 三、应用 四、总结 一、介绍 FunctionalInterface是一种信息注解类型,用于指明接口类型声明…...
Epson打印机连接wifi
环境 Epson L3153 打印机联通无线光猫 背景 最近家里的联通宽带不太稳定,经常断网。今天打了联通客服电话,师傅上门来,说可能是光猫用的时间太长了,换了一个新的联通光猫,问题解决。 wifi的名称是 CU_Y3ft 和 CU_Y3…...
Chapter 7 - 6. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理
Dedicated and Converged Ethernet Network专用和融合以太网网络 Just because a network is configured as a converged Ethernet network (lossy and lossless traffic), doesn’t necessarily mean that lossy and lossless traffic runs on it simultaneously. For exampl…...
【论文笔记】NeuRAD: Neural Rendering for Autonomous Driving
原文链接:https://arxiv.org/abs/2311.15260 1. 引言 神经辐射场(NeRF)应用在自动驾驶中,可以创建可编辑的场景数字克隆(可自由编辑视角和场景物体),以进行仿真。但目前的方法或者需要大量的训…...
通信原理 | 分贝dB、功率、功率谱、功率谱密度、信噪比
文章目录 分贝功率和分贝的关系能量谱功率谱功率谱和功率谱密度是不同的功率谱密度随机信号和确知信号信噪比基本定义分贝表示应用分贝 分贝:(用dB表示)是量度两个相同单位之间数量比例的计量单位,主要用于度量声音强度。 1贝尔(B)=10分布(dB),即1B = 10dB 分贝是以美国…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
