学习java Swing编程的一个简单Demo
chargingw 2024-09-08 02:49 10 浏览
import java.lang.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class SwingComponent
{
//创建窗体,JFrame
JFrame f = new JFrame("测试");
//定义一个按钮,并为之指定图标
//ImageIcon(Image image)
//根据图像对象创建一个 ImageIcon。 Icon是接口,ImageIcon实现了该接口,多态的体现
//定义一个单选按钮,并为之指定图标
Icon okIcon = new ImageIcon("ico/ok.png");
JButton ok = new JButton("确认",okIcon);
//定义一个单选按钮,出事处于选中状态
//JradioButton 实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。
//JRadioButton(String text, boolean selected)
//创建一个具有指定文本和选择状态的单选按钮。
JRadioButton male = new JRadioButton("男",true);
JRadioButton female = new JRadioButton("女",false);
ButtonGroup bg = new ButtonGroup();
//定义一个复选框,出事状态处于没有选中状态
JCheckBox married = new JCheckBox("是否已婚?",false);
String[] colors = new String[]{"红色","绿色","蓝色"};
//定义一个下拉选择框
//JComboBox(Object[] items)
//创建包含指定数组中的元素的 JComboBox。
JComboBox<String> colorChooser = new JComboBox<>(colors);
//定义一个列表选择框??????????????
//JList(Object[] listData)
//构造一个 JList,使其显示指定数组中的元素。
JList<String> colorList = new JList<>(colors);
//定义一个8行20列的多行文本框
JTextArea ta = new JTextArea(8,20);
//定义一个40列的单行文本框
JTextField name = new JTextField(40);
JMenuBar mb = new JMenuBar();
JMenu file = new JMenu("文件");
//JMenu(String s)
//构造一个新 JMenu,用提供的字符串作为其文本。
JMenu edit = new JMenu("编辑");
Icon newIcon = new ImageIcon("ico/new.png");
//JMenuItem(String text, Icon icon)
//创建带有指定文本和图标的 JMenuItem。
JMenuItem newItem = new JMenuItem("新建",newIcon);
Icon saveIcon = new ImageIcon("ico/new.png");
JMenuItem saveItem = new JMenuItem("保存",saveIcon);
Icon exitIcon = new ImageIcon("ico/exit.png");
JMenuItem exitItem = new JMenuItem("退出",exitIcon);
JCheckBoxMenuItem autoWrap = new JCheckBoxMenuItem("自动换行");
JMenuItem copyItem = new JMenuItem("复制",new ImageIcon("ico/copy.png"));
JMenuItem pasteItem = new JMenuItem("粘贴",new ImageIcon("ico/paste.png"));
JMenu format = new JMenu("格式");
JMenuItem commentItem = new JMenuItem("注释");
JMenuItem cancelItem = new JMenuItem("取消注释");
//定义一个右键菜单,用于设定程序的外观风格
JPopupMenu pop = new JPopupMenu();
ButtonGroup flavorGroup = new ButtonGroup();
//创建5个单选按钮,用于设定程序的外观风格
JRadioButtonMenuItem metalItem = new JRadioButtonMenuItem("Metal风格",true);
JRadioButtonMenuItem nimbusItem = new JRadioButtonMenuItem("Nimbus风格");
JRadioButtonMenuItem windowsItem = new JRadioButtonMenuItem("windows风格");
JRadioButtonMenuItem motifyItem = new JRadioButtonMenuItem("motifyItem风格");
JRadioButtonMenuItem classicItem = new JRadioButtonMenuItem("windows经典风格");
/*------------------下面是用于执行界面初始化的init方法-------------------------*/
public void init()
{
//创建一个装载了文本框、按钮的JPanel
JPanel bottom = new JPanel();
bottom.add(name);
bottom.add(ok);
f.add(bottom,BorderLayout.SOUTH);//用BorderLayout布局管理器,放在最底层
//创建一个装载了下拉选择框、三个JCheckBox的JPanel
JPanel checkPanel = new JPanel();
checkPanel.add(colorChooser);
////既要加载在一个ButtonGroup中,也要加载在checkPanel中
//若去掉bg.add(male);bg.add(female); 则能选两个性别
//若去掉 checkPanel.add(male);checkPanel.add(female); 则两个性别RadioButton消失
bg.add(male);
bg.add(female);
checkPanel.add(male);
checkPanel.add(female);
checkPanel.add(married);
//创建一个垂直排列的组件的Box,盛装多行文本域JPanel
Box topLeft = Box.createVerticalBox();//创建一个从上到下显示的Box
//使用JScrollPance作为普通组件的JViewPort
JScrollPane taJsp = new JScrollPane(ta);
topLeft.add(taJsp);
topLeft.add(checkPanel);
//创建一个水平排列组件的Box,盛装topLeft、colorList
Box top = Box.createHorizontalBox();
top.add(topLeft);
top.add(colorList);
//将Top Box容器添加到窗口的中间
f.add(top);
//----------下面开始组合菜单,并未菜单添加监听器---------------------
//为newItem设置快捷键,设置快捷键时要使用大写字母
newItem.setAccelerator(KeyStroke.getKeyStroke('N',InputEvent.CTRL_MASK));
newItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ta.append("用户单击了“新建”菜单\n");
}
});
//为file菜单添加菜单项
file.add(newItem);
file.add(saveItem);
file.add(exitItem);
//为exit菜单添加菜单项
edit.add(autoWrap);
//使用addSeparator方法添加菜单分隔线
edit.addSeparator();
edit.add(copyItem);
edit.add(pasteItem);
//为commentItem组件添加提示信息
commentItem.setToolTipText("将从程序代码注释起来!");
//为format菜单添加菜单项
format.add(commentItem);
format.add(cancelItem);
//使用添加new JMenuItem(“-”)的方式不能添加菜单分隔符
edit.add(new JMenuItem("-"));
//将format菜单组合到eidt菜单中,从而形成二级菜单
edit.add(format);
//将file、edit菜单添加到mb菜单条中
mb.add(file);
mb.add(edit);
//为f窗口设置菜单条
f.setJMenuBar(mb);
//------下面开始组合右键菜单,并安装右键菜单-----------------
flavorGroup.add(metalItem);
flavorGroup.add(nimbusItem);
flavorGroup.add(windowsItem);
flavorGroup.add(classicItem);
flavorGroup.add(motifyItem);
pop.add(metalItem);
pop.add(nimbusItem);
pop.add(windowsItem);
pop.add(classicItem);
pop.add(motifyItem);
//为5个风格菜单创建事件监听器
ActionListener flavorListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try{
switch(e.getActionCommand())
{
case "Metal风格":
changeFlavor(1);
break;
case "Nimbus风格":
changeFlavor(2);
break;
case "Windows风格":
changeFlavor(3);
break;
case "Windows经典风格":
changeFlavor(4);
break;
case "Motif风格":
changeFlavor(5);
break;
}
}
catch(Exception ee)
{
ee.printStackTrace();
}
}
};
//为5个风格菜单项添加事件监听器
metalItem.addActionListener(flavorListener);
nimbusItem.addActionListener(flavorListener);
windowsItem.addActionListener(flavorListener);
classicItem.addActionListener(flavorListener);
motifyItem.addActionListener(flavorListener);
//调用该方法即可设置右键菜单,无须使用事件机制;
ta.setComponentPopupMenu(pop);
//设置关闭窗口时,退出程序
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
//方法内部不再嵌套方法,而是调用语句了
}
private void changeFlavor(int flavor) throws Exception
{
switch(flavor)
{
//设置Metal风格
case 1:
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
break;
case 2:
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimusLoolAndFeel");
break;
case 3:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
break;
case 4:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
break;
case 5:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
break;
}
//更新f窗口内顶级容器以及内部所有组件的UI
SwingUtilities.updateComponentTreeUI(f.getContentPane());
//更新mb菜单条以及内部所有组件的UI
SwingUtilities.updateComponentTreeUI(mb);
//更新pop右键菜单以及内部所有组件的UI
SwingUtilities.updateComponentTreeUI(pop);
}
public static void main(String[] args)
{
new SwingComponent().init();
}
}
/*
1、JRadioButton:实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。与 ButtonGroup 对象配合使用可创建一组按钮,一次只能选择其中的一个按钮。(创建一个 ButtonGroup 对象并用其 add 方法将 JRadioButton 对象包含在此组中。)
2、ButtonGroup: 此类用于为一组按钮创建一个多斥(multiple-exclusion)作用域。使用相同的 ButtonGroup 对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。
3、JComboBox:将按钮或可编辑字段与下拉列表组合的组件。用户可以从下拉列表中选择值,下拉列表在用户请求时显示。如果使组合框处于可编辑状态,则组合框将包括用户可在其中键入值的可编辑字段。
4、JMenuBar:菜单栏的实现。将 JMenu 对象添加到菜单栏以构造菜单。当用户选择 JMenu 对象时,就会显示其关联的 JPopupMenu,允许用户选择其上的某一个 JMenuItem。
5、JMenuItem:菜单中的项的实现。菜单项本质上是位于列表中的按钮。当用户选择“按钮”时,则执行与菜单项关联的操作。JPopupMenu 中包含的 JMenuItem 正好执行该功能。
6、JCheckBoxMenuItem:可以被选定或取消选定的菜单项。如果被选定,菜单项的旁边通常会出现一个复选标记。如果未被选定或被取消选定,菜单项的旁边就没有复选标记。像常规菜单项一样,复选框菜单项可以有与之关联的文本或图标,或者二者兼而有之。举例:自动换行,如果被选中,后面会出现 钩
7、JPopupMenu:弹出菜单的实现,弹出菜单是一个可弹出并显示一系列选项的小窗口。JPopupMenu 用于用户在菜单栏上选择项时显示的菜单。它还用于当用户选择菜单项并激活它时显示的“右拉式 (pull-right)”菜单。最后,JPopupMenu 还可以在想让菜单显示的任何其他位置使用。例如,当用户在指定区域中右击时。
8、JRadioButtonMenutItem:一个单选按钮菜单项的实现。JRadioButtonMenuItem 是属于一组菜单项中的一个菜单项,该组中只能选择一个项。被选择的项显示其选择状态。选择此项的同时,其他任何以前被选择的项都切换到未选择状态。要控制一组单选按钮菜单项的选择状态,请使用 ButtonGroup 对象。
9、JScrollPane:提供轻量级组件的 scrollable 视图。JScrollPane 管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口。
10、JMenu被添加到JMenuBar中,形成菜单,被添加在JMenu中,形成二级菜单;
11、Swing菜单不允许使用add(new JMenutItem(“-”))的方式来添加菜单分隔符,只能使用addSeparator()方法来添加菜单分隔符
*/
相关推荐
- Compose基础-Side-effect(二)(compose in)
-
1.前言在Compose基础-Side-effect(一)中,我们学习了几个常用的Side-effect:LaunchedEffect和rememberCoroutineScope,以及关键字rem...
- MAC 10.14 安装教程-制作安装EFI文件
-
如果仅限于制作一份可以进入黑苹果安装界面的EFI文件,大家只要稍作了解即可。喜欢折腾的朋友可以自己动手试试。主要设置部分我都会在图中加红圈说明。============================...
- Java14的新特性(质量是指客体的一组固有特性组织应满足的要求的程度,以下不属于)
-
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java1...
- 全新版Jetpack进阶提升,系统性落地短视频App(完结)
-
xia仔ke:quangneng.com/2342/全新版Jetpack进阶提升:系统性落地短视频App开发指南在移动应用开发领域,短视频应用凭借其丰富的互动性和娱乐性,吸引了大量用户。为了构建一个高...
- C 语言源程序文件扩展名及相关知识详解
-
本文就来聊一聊C语言源程序文件拼接后生成的文件扩展名是什么?,以及C++源程序文件扩展名对应的知识点是什么。希望对大家有所帮助,别忘了收藏本站哦。在Linux平台上,C语言源代码文件一般以.c为扩展名...
- c语言从头开始(三:编译器工作原理)
-
c语言从头开始(三:编译器工作原理)------------------以gcc编译器为例子,编译实际上总共经历了四个阶段预处理--->编译--->汇编--->链接1.预处理预处理就...
- 编译器 GCC 和 Clang 有什么区别?
-
Clang是一个C语言、C++、Objective-C语言的轻量级编译器,遵循BSD协议。Clang编译速度快、内存占用小、兼容GCC等一些优秀的特点使得很多工具都在使用它。今天就来谈谈Clang和G...
- Meta发布LLM编译器 称将改变我们的编程方式
-
Meta发布了Meta大型语言模型(LLM)编译器,这是一套强大的开源模型,旨在优化代码并彻底改变编译器设计。这项创新有望改变开发人员优化代码的方式,使代码优化更快、更高效、更具成本效益。在将大型语...
- 汇编语言之寄存器(汇编语言寄存器清零指令)
-
1、汇编语言的种类8086汇编(16位)X86汇编(32位)X64汇编(64位)ARM汇编(嵌入式,移动设备)......2、X64汇编X64汇编根据编译器的不同,有2种书写格式:intel和AT&...
- 前端笔记:JS 中 if / if……else……替换方式
-
说说烂大街的if/if...else...,程序中用得最多的流程判断语句。对着曾经满屏的if/if...else...,心想能不能搞点事情,折腾点浪花浪里呀浪。对顶着“这个需求很简单,怎么实现我不管,...
- JS 替换字符串中的文字内容(js 替换字符串中的文字内容是什么)
-
letsrt='helloword'srt.replace('hello','')第一个''为需求替换的内容第二个...
- excel中常用的快捷键Ctrl?H 替换的四种常用使用方法教程
-
Ctrl+H:替换的四种使用技巧。Hello,今天来学习Ctrl+H替换的几种用法。·先来看第一种,搭配通配符星号*来替换数据。这里的星号是通配符,它可以代表任何值,而且没有位数的限制...
- 在 JavaScript 中替换所有指定字符 3 种方法
-
在JS没有提供一种简便的方法来替换所有指定字符。在Java中有一个replaceAll(),replaceAll(Stringregex,Stringreplacement))方法...
- 查找替换的6种典型用法,全在此文,速度围观哦
-
查找替换,应该是Excel中很常见的操作了,但替换之后,并不能得到自己想要的效果,如下图:从示例中可以看出,目的是将“月薪”为0的信息替换为“待发放”,但结果却是将“月薪”中含有“0”的值全部替换为了...
- 「JS 逆向百例」W店UA,OB反混淆,抓包替换CORS跨域错误分析
-
关注微信公众号:K哥爬虫,持续分享爬虫进阶、JS/安卓逆向等技术干货!声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均...
- 一周热门
- 标签列表
-
- 端口被占用 (84)
- 代码转换 (76)
- ios测试工具 (79)
- require_once (89)
- oracle11g (88)
- oracleparameter (74)
- sessionscope (79)
- asynctask (90)
- oracle创建用户 (78)
- ts文件 (79)
- go microsoft com (75)
- plsql developer 64位 (74)
- 重复数据删除 (77)
- threadlocal (90)
- settimeoutinterval (90)
- weakreference (78)
- adb 命令 (74)
- ajax (76)
- wordpress安装 (77)
- excel vlookup (80)
- widget (77)
- ps复制图层快捷键 (108)
- outofmemory (88)
- divcss (74)
- iis安装教程 (78)