Swing是Java自己开发出的一套GUI组件,不同于AWT去调用操作系统的GUI

正是因为非系统平台的GUI,所以程序运行的要慢一些

涉及的设计模式:MVC模式

Model(组件对象状态)

View(组件可视化表现)

Controller(组件的事件行为)

类体系:

java.awt.Component
|
java.awtContainer
|
java.swing.JComponent
|
java.swing.Jxxxx(各种组件的具体类)

演示案例:

package cn.dzz.swing;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; public class Demo01 { JFrame jFrame = new JFrame("Swing"); JMenuBar jmenuBar = new JMenuBar(); JMenu fileJMenu = new JMenu("文件");
JMenu editJMenu = new JMenu("编辑");
JMenuItem autoNextLine = new JMenuItem("自动换行");
// JMenuItem copy = new JMenuItem("复制")
JMenuItem copy = new JMenuItem("复制", new ImageIcon("img/icon01.png"));
JMenuItem paste = new JMenuItem("粘贴", new ImageIcon("img/icon01.png")); JMenu formatJMenu = new JMenu("格式");
JMenuItem comment = new JMenuItem("注释");
JMenuItem cancelComment = new JMenuItem("取消注释"); // 文本域
JTextArea jTextArea = new JTextArea(8,20);
// 列表框
String[] colorList = {
"红色",
"绿色",
"蓝色",
};
JList<String> jList = new JList<>(colorList);
// 下拉选择框
JComboBox<String> jComboBox = new JComboBox<>();
// 单选
ButtonGroup buttonGroup = new ButtonGroup();
JRadioButton male = new JRadioButton("男性", true);
JRadioButton female = new JRadioButton("女性", false);
// 复选框
JCheckBox isMarry = new JCheckBox("是否已婚", true); // 底部
JTextField jTextField = new JTextField(20);
JButton ok = new JButton("确定", new ImageIcon("img/icon02.png"));
// 风格设置
JPopupMenu styleMenu = new JPopupMenu();
ButtonGroup styleGroup = new ButtonGroup();
JRadioButtonMenuItem metal = new JRadioButtonMenuItem("Metal-Style");
JRadioButtonMenuItem nimbus = new JRadioButtonMenuItem("Nimbus-Style");
JRadioButtonMenuItem windows = new JRadioButtonMenuItem("Windows-Style");
JRadioButtonMenuItem classicWindows = new JRadioButtonMenuItem("ClassicWindows-Style");
JRadioButtonMenuItem motif = new JRadioButtonMenuItem("Motif-Style"); public void init() { JPanel bottomPanel = new JPanel();
bottomPanel.add(jTextField);
bottomPanel.add(ok);
jFrame.add(bottomPanel, BorderLayout.SOUTH); JPanel selectPanel = new JPanel(); jComboBox.addItem("red");
jComboBox.addItem("green");
jComboBox.addItem("blue");
selectPanel.add(jComboBox); buttonGroup.add(male);
buttonGroup.add(female);
selectPanel.add(male);
selectPanel.add(female);
selectPanel.add(isMarry); Box leftBox = Box.createVerticalBox();
leftBox.add(jTextArea);
leftBox.add(selectPanel); Box topBox = Box.createHorizontalBox();
topBox.add(leftBox);
topBox.add(jList);
jFrame.add(topBox); // 顶部菜单设置
formatJMenu.add(comment);
formatJMenu.add(cancelComment); editJMenu.add(autoNextLine);
editJMenu.addSeparator(); // 分割线
editJMenu.add(copy);
editJMenu.add(paste);
editJMenu.addSeparator(); // 分割线
editJMenu.add(formatJMenu); jmenuBar.add(fileJMenu);
jmenuBar.add(editJMenu); jFrame.setJMenuBar(jmenuBar); styleMenu.add(metal);
styleMenu.add(nimbus);
styleMenu.add(windows);
styleMenu.add(classicWindows);
styleMenu.add(motif); // 事件监听
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String actionCommand = e.getActionCommand();
try {
changeStyle(actionCommand);
} catch (Exception exception) {
exception.printStackTrace();
}
}
};
metal.addActionListener(actionListener);
nimbus.addActionListener(actionListener);
windows.addActionListener(actionListener);
classicWindows.addActionListener(actionListener);
motif.addActionListener(actionListener); // 设置进按钮组中。表示只能选中一个选项
styleGroup.add(metal);
styleGroup.add(nimbus);
styleGroup.add(windows);
styleGroup.add(classicWindows);
styleGroup.add(motif); jTextArea.setComponentPopupMenu(styleMenu); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.pack();
jFrame.setVisible(true);
} private void changeStyle(String command) throws Exception {
switch (command) {
case "Metal-Style":
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
break;
case "Nimbus-Style":
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
break;
case "Windows-Style":
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
break;
case "ClassicWindows-Style":
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
break;
case "Motif-Style":
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
break;
}
// 更新界面风格
SwingUtilities.updateComponentTreeUI(jFrame.getContentPane());
SwingUtilities.updateComponentTreeUI(jmenuBar);
SwingUtilities.updateComponentTreeUI(styleMenu);
} public static void main(String[] args) {
new Demo01().init();
}
}

  

效果预览:

风格选择:

编辑菜单:

【Java-GUI】07 Swing01 入门案例的更多相关文章

  1. java全栈day01-02入门案例

    一  在开始案例之前,我们需要了解一下Java应用程序的编写流程. 通过上图我们可以了解到编写的程序大致如下: 1 源文件:编写Java源文件(我们也称之为源代码文件),它的扩展名为.java: 2 ...

  2. springMVC框架入门案例

    控制器: package cn.mepu.controller; import org.springframework.stereotype.Controller; import org.spring ...

  3. 075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现

    075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现 本文知识点:综合案例-数组移位-主方法功能4的实现 说明:因为 ...

  4. _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)

    博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...

  5. Quartz应用实践入门案例二(基于java工程)

    在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任 ...

  6. 074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现

    074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现 本文知识点:综合案例-数组移位-主方法功能3的实现 说明:因为 ...

  7. 073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现

    073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现 本文知识点:综合案例-数组移位-主方法功能1和2的实现 说 ...

  8. 072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法

    072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法 本文知识点:综合案例-数组移位-在指定位置处插入数据方法 ...

  9. 071 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 03 综合案例-数组移位-显示数组当中所有元素的的方法

    071 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 03 综合案例-数组移位-显示数组当中所有元素的的方法 本文知识点:综合案例-数组移位-显示数组当中所有元素 ...

  10. 070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据

    070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据 本文知识点:综合案例-数组移位-从键盘接收数据 说明:因为时间紧张 ...

随机推荐

  1. Linux扩展篇-shell编程(五)-流程控制(一)-if语句

    基本语法: (1)单分支 if [ condition ];then statement(s) fi 或 if [ condition ] then statement(s) fi (2)多分支 if ...

  2. C#.NET 不可见字符DEL

    不可见字符DEL .空格.替换掉. 签名时遇到了客户端发过来的数据包含一个DEL.Notepad++ 里显示为DEL. 包含这个字符签名给上游,就会报错:签名错误. 得想办法replace掉.目前方案 ...

  3. ConvertLatOrLonFilter-经纬度格式转换-保留6位

    ConvertLatOrLonFilter-经纬度格式转换-保留6位 /** * 转换经纬度 * 小数点最后最多为6位 * @param latOrLon * @return */ private S ...

  4. 漏洞复现之CVE-2012-1823(PHP-CGI远程代码执行)

    关于CGI知识点 `CGI模式下的参数: -c 指定php.ini文件的位置 -n 不要加载php.ini文件 -d 指定配置项 -b 启动fastcgi进程 -s 显示文件源码 -T 执行指定次该文 ...

  5. Yapi部署到kubernetes(k8s)--Azure AKS

    背景 找来找去都没找到简单方便的部署yapi到k8s的教程,就自己写了个: 本教程部署的版本是: 1.10.2 部署步骤 克隆仓库: git clone https://github.com/gebi ...

  6. mysql判断两个字符串(以逗号分隔)是否存在交集

    转载:https://blog.csdn.net/username666/article/details/107815331?utm_medium=distribute.pc_relevant.non ...

  7. SQLCel匹配原数据信息,更新原数据所有信息并插入新数据的过程

    使用SQLCel高效率(速度快,数据完整)的解决了我领导提的问题 "如何更新数据库中原有的数据并插入新的订单数据" 过程如下: 思路:使用字段匹配和修改字段即可解决问题,用时3分钟 ...

  8. 基于wxpython的时钟小工具

    前言 基于python3.10 + wxpython 的时钟小工具 代码由chatgpt3.5生成,作者自己调试.留作后续参考. 正文 timer_ok.py import wx import tim ...

  9. Centos7安装MySQL详细步骤(配置开机自启)

    MySQL 检查系统是否安装过mysql //检查系统中有无安装过mysql rpm -qa|grep mysql //查询所有mysql 对应的文件夹,全部删除 whereis mysql find ...

  10. 部分解决 | ocrmypdf对中文pdf进行ocr识别后存在多余空格

    1.问题 ocrmypdf安装采用的是在windows安装方法具体看 https://media.readthedocs.org/pdf/ocrmypdf/latest/ocrmypdf.pdf 由于 ...