当前位置: 首页 > news >正文

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快速入门(二十七)

注释很详细&#xff0c;直接上代码 上一篇 新增内容 1.为按钮指定图标 2. 列表框的并列 3.菜单项绑定快捷键 4.控件悬浮提示信息 5.菜单项设置小图标 6.五种布局风格右键选择切换 package swing21_30;import javax.swing.*; import java.awt.*; import java.awt.event.…...

Vue 封装echarts柱状图(Bar)组件

目的&#xff1a;减少重复代码&#xff0c;便于维护 显示效果 组件代码 <template><div class"ldw-data-content-box"><div class"ldw-chilren-box"><div class"title" v-if"title">{{ title }}</div>…...

异常(Java)

1.异常的概念 在 Java 中&#xff0c;将程序执行过程中发生的不正常行为称为异常 。 1.算数异常 System.out.println(10 / 0); // 执行结果 Exception in thread "main" java.lang.ArithmeticException: / by zero 2.数组越界异常 int[] arr {1, 2, 3}; System.out.…...

vue的插槽解析

插槽 好处&#xff1a;组件的内容结构可定制 用slot插槽进行占位 语法: 子组件中通过slot进行占位 理解&#xff1a;父组件&#xff0c;在子组件标签嵌套的内容就会被渲染到slot地方 一、默认插槽 //子组件 <slot>slot插槽</slot> //方法一<slot name"…...

Spring(3)Spring从零到入门 - Spring整合技术及AOP事务管理

Spring&#xff08;3&#xff09;Spring从零到入门 - Spring整合技术及AOP事务管理 文章目录 Spring&#xff08;3&#xff09;Spring从零到入门 - Spring整合技术及AOP事务管理4 Spring整合技术示例4.1 Spring整合Mybatis4.1.1 Mybatis开发回顾4.1.2 整合Spring分析4.1.3 Spri…...

适配器模式学习

适配器模式&#xff08;Adapter&#xff09;将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式分为类适配器模式和对象适配器模式两种&#xff0c;前者类之间的耦合度比后者高&#xff0c;且要…...

NET中使用Identity+CodeFirst+Jwt实现登录、鉴权

目录 前言 一、创建上下文类 1.自定义MyContext上下文类继承IdentityDbContext 2.在Program中添加AddDbContext服务 二、使用Migration数据迁移 1.在控制台中 依次使用add-migration 、updatebase 命令 2.如何修改表名 3.如何自定义字段 三、使用Identity实现登录、修改密码 …...

详解Keras3.0 API: Optimizers

Optimizers 优化器&#xff08;Optimizer&#xff09;是深度学习中用于更新模型参数的一种方法&#xff0c;它的目标是最小化损失函数。在训练神经网络时&#xff0c;我们通常使用梯度下降法来更新参数&#xff0c;而优化器就是实现这一过程的工具。优化器的主要作用是在每次迭…...

【数据结构】字符串匹配|BF算法|KMP算法|next数组的优化

字符串匹配算法是在实际工程中经常遇到的问题&#xff0c;也是各大公司笔试面试的常考题目&#xff0c;本文主要介绍BF算法&#xff08;最好想到的算法&#xff0c;也最好实现&#xff09;和KMP算法&#xff08;最经典的&#xff09; 一、BF算法 BF算法&#xff0c;即暴力(Bru…...

阿里云 ACK One 新特性:多集群网关,帮您快速构建同城容灾系统

云布道师 近日&#xff0c;阿里云分布式云容器平台 ACK One[1]发布“多集群网关”[2]&#xff08;ACK One Multi-cluster Gateways&#xff09;新特性&#xff0c;这是 ACK One 面向多云、多集群场景提供的云原生网关&#xff0c;用于对多集群南北向流量进行统一管理。 基于 …...

vscode自定义代码片段

前言 代码片段&#xff0c;指的是能够帮助输入重复代码模式&#xff0c;比如初始页面的模板。通过 snippet &#xff0c;我们仅仅输入一小段字符串&#xff0c;就可以在代码片引擎的帮助下&#xff0c;生成预定义的模板代码&#xff0c;接着我们还可以通过在预定义的光标位置之…...

【贪心算法】专题练习一

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 前言 1.什么是贪心算法&#xff1f;——贪婪鼠目寸光 贪心策…...

【JMeter】使用nmon进行性能资源监控

一、前言 ​ 在工作中可能会遇到需要在压测的时候对Linux服务器进行性能资源监控的情况。这时可以用nmon来对服务器进行监控。 二、nmon的下载安装 1.查看系统信息 shell cat /etc/os-release 结果为 shell PRETTY_NAME"Debian GNU/Linux 12 (bookworm)" NAME&…...

Unity预设体

目录 预设体是什么&#xff1f; 如何创建预设体&#xff1f; 如何修改预设体&#xff1f; 如何删除预设体&#xff1f; 预设体是什么&#xff1f; Unity中的预设体&#xff08;Prefab&#xff09;是一种可重复使用的游戏对象模板。它允许开发者创建一个或多个游戏对象&…...

Elasticsearch 写入优化探索:是什么影响了refresh 耗时?

1、问题背景&#xff1a; 数据写入后&#xff0c;refresh耗时过长&#xff0c;能达到1s-5s。 想通过测试&#xff0c;探索确认影响refresh的因素&#xff0c;比如&#xff1a;写入操作是新增还是更新&#xff0c;deleted文档占比是否有影响&#xff0c;是否有其他索引配置&…...

Java8新特性——函数式接口

目录 一、介绍 二、示例 &#xff08;一&#xff09;Consumer 源码解析 测试示例 &#xff08;二&#xff09;Comparator &#xff08;三&#xff09;Predicate 三、应用 四、总结 一、介绍 FunctionalInterface是一种信息注解类型&#xff0c;用于指明接口类型声明…...

Epson打印机连接wifi

环境 Epson L3153 打印机联通无线光猫 背景 最近家里的联通宽带不太稳定&#xff0c;经常断网。今天打了联通客服电话&#xff0c;师傅上门来&#xff0c;说可能是光猫用的时间太长了&#xff0c;换了一个新的联通光猫&#xff0c;问题解决。 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

原文链接&#xff1a;https://arxiv.org/abs/2311.15260 1. 引言 神经辐射场&#xff08;NeRF&#xff09;应用在自动驾驶中&#xff0c;可以创建可编辑的场景数字克隆&#xff08;可自由编辑视角和场景物体&#xff09;&#xff0c;以进行仿真。但目前的方法或者需要大量的训…...

通信原理 | 分贝dB、功率、功率谱、功率谱密度、信噪比

文章目录 分贝功率和分贝的关系能量谱功率谱功率谱和功率谱密度是不同的功率谱密度随机信号和确知信号信噪比基本定义分贝表示应用分贝 分贝:(用dB表示)是量度两个相同单位之间数量比例的计量单位,主要用于度量声音强度。 1贝尔(B)=10分布(dB),即1B = 10dB 分贝是以美国…...

Apache-Guacamole实战:用Docker三分钟搞定Windows11远程控制环境搭建

Apache-Guacamole实战&#xff1a;三分钟Docker部署Windows11远程控制环境 远程办公和跨平台协作已成为现代开发者的日常需求。想象一下这样的场景&#xff1a;你正在咖啡馆用MacBook调试代码&#xff0c;突然需要访问办公室的Windows11开发环境&#xff1b;或是团队需要共享一…...

AI 创作者指南:09.AI 作为你的创作运营助理

第 9 篇 AI 作为你的创作运营助理 多模态魔法刚玩完,你现在一篇文章能变10种形态,是不是已经觉得内容像会“分身术”了?😊 来,第三部分继续!第9篇——AI 作为你的创作运营助理。 以前你自己盯排期、想矩阵、试标题,累得像管家婆。现在AI直接当你的“运营小秘书”,帮你…...

Clipy:macOS效率工具中的自动化剪贴板增强专家

Clipy&#xff1a;macOS效率工具中的自动化剪贴板增强专家 【免费下载链接】Clipy Clipboard extension app for macOS. 项目地址: https://gitcode.com/gh_mirrors/cl/Clipy 你是否曾遇到这样的窘境&#xff1a;刚复制的重要文本被新内容覆盖&#xff0c;不得不重新打开…...

Qwen3-VL-8B-Instruct-GGUF效果分享:100张用户实测图平均响应时间<1.8s(A10 GPU)

Qwen3-VL-8B-Instruct-GGUF效果分享&#xff1a;100张用户实测图平均响应时间<1.8s&#xff08;A10 GPU&#xff09; 1. 模型效果实测&#xff1a;速度与精度的双重惊喜 当我第一次看到Qwen3-VL-8B-Instruct-GGUF的测试结果时&#xff0c;确实被惊艳到了。这个模型在A10 G…...

Pixel Mind Decoder 本地开发环境搭建:使用PyCharm进行调试与开发

Pixel Mind Decoder 本地开发环境搭建&#xff1a;使用PyCharm进行调试与开发 1. 准备工作与环境配置 在开始使用PyCharm进行Pixel Mind Decoder的开发之前&#xff0c;我们需要先完成一些基础准备工作。这部分内容将帮助你快速搭建起开发环境&#xff0c;为后续的调试和开发…...

从零到一:在Simulink中构建SVPWM仿真模型的实践指南

1. 为什么选择Simulink搭建SVPWM模型&#xff1f; 第一次接触电机控制时&#xff0c;我被各种专业术语搞得晕头转向。直到发现Simulink这个可视化工具&#xff0c;才真正理解了SVPWM&#xff08;空间矢量脉宽调制&#xff09;的精髓。就像用乐高积木搭建城堡&#xff0c;Simuli…...

YOLOv11赋能卡证检测矫正:新一代目标检测模型实战应用

YOLOv11赋能卡证检测矫正&#xff1a;新一代目标检测模型实战应用 最近在做一个卡证信息自动录入的项目&#xff0c;发现最头疼的不是后面的文字识别&#xff0c;而是第一步——把歪歪扭扭、角度各异的证件图片给“摆正”了。传统的图像处理方法&#xff0c;比如霍夫变换找直线…...

云效Codeup代码评审功能深度体验:如何用它提升团队代码质量(附真实项目案例)

云效Codeup代码评审实战指南&#xff1a;从规范制定到CI/CD集成 在当今快节奏的软件开发环境中&#xff0c;代码质量直接决定了产品的稳定性和可维护性。作为技术负责人&#xff0c;我经历过无数次因代码质量问题导致的深夜加班和紧急修复。直到团队开始系统化使用云效Codeup的…...

四旋翼无人机PID控制实战:从零搭建Matlab仿真模型(附完整代码)

四旋翼无人机PID控制实战&#xff1a;从零搭建Matlab仿真模型&#xff08;附完整代码&#xff09; 当第一次看到四旋翼无人机在空中灵活翻转、精准悬停时&#xff0c;很多人都会被这种看似违反物理直觉的飞行姿态所震撼。作为现代控制理论最生动的应用场景之一&#xff0c;无人…...

CMake vs. MsBuild vs. Ninja:C++编译工具链全解析(附Windows平台实战示例)

CMake vs. MsBuild vs. Ninja&#xff1a;C编译工具链全解析&#xff08;附Windows平台实战示例&#xff09; 在C开发的世界里&#xff0c;构建工具的选择往往决定了项目的可维护性和跨平台能力。当你在Windows平台上打开Visual Studio时&#xff0c;背后默默工作的可能是MsBui…...