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

请添加图片描述

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

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

相关文章

使用 Elasticsearch 检测抄袭 (一)

作者&#xff1a;Priscilla Parodi 抄袭可以是直接的&#xff0c;涉及复制部分或全部内容&#xff0c;也可以是释义的&#xff0c;即通过更改一些单词或短语来重新表述作者的作品。 灵感和释义之间是有区别的。 即使你得出类似的结论&#xff0c;也可以阅读内容&#xff0c;获得…

【MybatisPlus快速入门】(2)SpringBoot整合MybatisPlus 之 标准数据层开发 代码示例

目录 1 标准CRUD使用2 新增3 删除4 修改5 根据ID查询6 查询所有7 MyBatis-Plus CRUD总结 之前我们已学习MyBatisPlus在代码示例与MyBatisPlus的简介&#xff0c;在这一节中我们重点学习的是数据层标准的CRUD(增删改查)的实现与分页功能。代码比较多&#xff0c;我们一个个来学习…

如何用Python写一个双均线策略

(永久免费&#xff0c;扫码加入) 本篇是量化系列的内容&#xff0c;已经购买小册的不要看了。 我的小册:(小白零基础用Python量化股票分析小册) ,原价199&#xff0c;限时特价39&#xff0c;满100人涨10元。 双均线策略应该是所有的股票软件&#xff0c;股票网站都必备的一个策…

【English】水果单词小小汇总~~

废物研究生&#xff0c;只要不搞科研干啥都是开心的&#xff0c;啊啊啊啊啊科研要命。作为一个水果怪&#xff08;每天不吃水果就要命的那种哈哈哈哈&#xff09;突然发现竟然就知道什么apple、banana、orange&#xff01;惭愧惭愧&#xff0c;正好兴致正浓&#xff0c;来整理一…

Python 爬虫之下载视频(四)

爬取某投币视频平台的小视频 文章目录 爬取某投币视频平台的小视频前言一、基本内容二、基本思路三、代码编写1.引入库2.设置手机模式3.跳过手动点击等操作4.获取视频下载地址5.获取视频标题6.下载保存 总结 前言 这篇用来记录一下如何爬取这个平台的视频&#xff0c;比如一些…

NUAA-云计算-考试

19级期末 问题 答案: md格式 自己想办法看 # 随堂测验#### 一、请简述GFS 的系统架构和特点。**1. 系统架构**- GFS将整个系统节点分为三类角色&#xff1a;- Client&#xff08;客户端&#xff09;&#xff1a;Client是GFS提供给应用程序的访问接口&#xff0c;以库文件的…

C语言如何生成随机数以及设置随机数的范围。(超详细)

文章目录 前言一、随机数的生成1.rand函数2.srand函数3.time函数4.生成随机数的代码如下&#xff1a; 二、设置随机数的范围总结 前言 博主将会这篇文章介绍c语言如何生成随机数以及设置随机数的范围。创作不易请大家点点赞&#xff0c;点点关注。 一、随机数的生成 1.rand函…

Ubuntu20.04纯命令配置PCL(点云库)

Ubuntu20.04纯命令配置PCL&#xff08;点云库&#xff09; 最近在学习点云库&#xff08;PCL&#xff09;的使用&#xff0c;第一步就是在自己的电脑安装配置PCL。 首先&#xff0c;对于ubuntu 16.04以上版本&#xff0c;可以直接使用命令进行安装&#xff0c;新建好一个文件夹…

IDEA中Git的常用使用方式

IDEA中Git的常用使用方式 1.初次拉取远程仓库项目代码到本地2.初次提交本地项目代码到远程仓库新分支方式一&#xff1a;提交时把.git目录删除掉&#xff0c;不保留以往修改记录方式二&#xff1a;提交时不删除.git目录&#xff0c;保留以往修改记录 3.日常拉取、提交、推送代码…

基于Hexo+GitHub Pages 的个人博客搭建

基于HexoGitHub Pages 的个人博客搭建 步骤一&#xff1a;安装 Node.js 和 Git步骤二&#xff1a;创建Github Pages 仓库步骤二&#xff1a;安装 Hexo步骤三&#xff1a;创建 Hexo 项目步骤四&#xff1a;配置 Hexo步骤五&#xff1a;创建新文章步骤六&#xff1a;生成静态文件…

vscode | python | remote-SSH | Debug 配置 + CLIP4Clip实验记录

安装Extension 本地安装Remote-SSH、python 远程服务器上安装Python 难点&#xff1a;主机和远程服务器上安装Python扩展失败&#xff0c;可能是网络、代理等原因导致解决方法&#xff1a; 主机在官方网站下载Python扩展&#xff1a;https://marketplace.visualstudio.com/it…

AI绘画训练一个扩散模型-上集

介绍 AI绘画&#xff0c;其中最常见方案基于扩散模型&#xff0c;Stable Diffusion 在此基础上&#xff0c;增加了 VAE 模块和 CLIP 模块&#xff0c;本文搞了一个测试Demo&#xff0c;分为上下两集&#xff0c;第一集是denoising_diffusion_pytorch &#xff0c;第二集是diff…

数据库开发之图形化工具以及表操作的详细解析

2.3 图形化工具 2.3.1 介绍 前面我们讲解了DDL中关于数据库操作的SQL语句&#xff0c;在我们编写这些SQL时&#xff0c;都是在命令行当中完成的。大家在练习的时候应该也感受到了&#xff0c;在命令行当中来敲这些SQL语句很不方便&#xff0c;主要的原因有以下 3 点&#xff…

截断整型提升算数转换

文章目录 &#x1f680;前言&#x1f680;截断&#x1f680;整型提升✈️整型提升是怎样的 &#x1f680;算术转换 &#x1f680;前言 大家好啊&#xff01;这里阿辉补一下前面操作符遗漏的地方——截断、整型提升和算数转换 看这一篇要先会前面阿辉讲的数据的存储否则可能看不…

Dijkstra(迪杰斯特拉)算法总结

知识概览 Dijkstra算法适用于解决所有边权都是正数的最短路问题。Dijkstra算法分为朴素的Dijkstra算法和堆优化版的Dijkstra算法。朴素的Dijkstra算法时间复杂度为&#xff0c;适用于稠密图。堆优化版的Dijkstra算法时间复杂度为&#xff0c;适用于稀疏图。稠密图的边数m和是一…

React学习计划-React16--React基础(五)脚手架创建项目、todoList案例、配置代理、消息订阅与发布

一、使用脚手架create-react-app创建项目 react脚手架 xxx脚手架&#xff1a;用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需要的配置&#xff08;语法检查、jsx编译、devServe…&#xff09;下载好了所有相关的依赖可以直接运行一个简单的效果 react提供了一个…

产品设计 之 创建完美产品需求文档的4个核心要点

客户描述他们想要的产品和最终交付的产品之间的误解一般很大&#xff0c;设计者和客户的角度不同&#xff0c;理解的程度也不同&#xff0c;就需要一个统一的交流中介。这里包含PRD。 为了说明理解误差的问题。下面这张有趣的图画可以精准阐述。 第一张图片展示了客户所描述…

Matlab仿真OOK、2FSK、2PSK、QPSK、4QAM在加性高斯白噪声信道中的误码率与归一化信噪比的关系

本文为学习所用&#xff0c;严禁转载。 本文参考链接 https://zhuanlan.zhihu.com/p/667382398 QPSK代码及高斯白噪声如何产生 https://ww2.mathworks.cn/help/signal/ref/butter.html 滤波器 https://www.python100.com/html/4LEF79KQK398.html 低通滤波器 本实验使用matlab仿…

【linux提权】利用setuid进行简单提权

首先先来了解一下setuid漏洞&#xff1a; SUID (Set UID)是Linux中的一种特殊权限,其功能为用户运行某个程序时&#xff0c;如果该程序有SUID权限&#xff0c;那么程序运行为进程时&#xff0c;进程的属主不是发起者&#xff0c;而是程序文件所属的属主。但是SUID权限的设置只…

「微服务模式」七种微服务反模式

什么是微服务 流行语经常为进化的概念提供背景&#xff0c;并且需要一个良好的“标签”来促进对话。微服务是一个新的“标签”&#xff0c;它定义了我个人一直在发现和使用的领域。文章和会议描述了一些事情&#xff0c;我慢慢意识到&#xff0c;过去几年我一直在发展自己的个人…