Swing探索:创建带图像的菜单

咱们继续学Java——高级篇 第一百八十七篇:之Java高级Swing编程之构件组织器之选项卡面板 在Java编程的学习旅程中,我们始终保持着积极探索、共同成长的态度。今天,我们将深入学习Java高级Swing编程中关于构件组织器之选项卡面板的部分,包括选项卡面板的功能特性、使用方法以及在实际应用中的示例,帮助大家掌握如何使用选项卡面板有效地组织和展示多个相关内容,提升用户界面的易用性和交互性。 阅读详情

在Windows的“开始”菜单上,会在菜单左侧显示一幅图像。很多基于Windows的软件也有类似效果的菜单。用Java Swing可以制作出类似效果的菜单吗?答案当然是肯定的,而且非常简单。

我们首先从Swing的JPopupMenu组件进行扩展,让其接受一个图片,显示在左侧;或者接受一个字符串,动态生成图片后,在显示在左侧。为了避免准备图片的麻烦,我们就以动态生成内存图片为例,编写一个JImagedPopupMenu类。

JImagedPopupMenu在创建时可以接受一个字符串,生成一副内存图片BufferedImage。然后,我们需要覆盖JComponent的getInsets方法,重新计算Inset的left值,将其在原数值基础上加上图片的宽度,然后返回:

 public Insets getInsets() {
        Insets insets = (Insets)super.getInsets().clone();
        insets.left += imageIcon.getIconWidth();
        return insets;
    }

最后,覆盖paintComponent方法,在原基础上增加图片的绘制:
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (imageIcon != null) {
            Insets insets = getInsets();
            g.drawImage(imageIcon.getImage(),
                        insets.left - imageIcon.getIconWidth(),
                        insets.top,
                        null);
        }
    }

完整代码如下:

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import javax.swing.*;

public class JImagedPopupMenu extends JPopupMenu {
    private Font font = new Font("Dialog", Font.BOLD, 13);
    private ImageIcon imageIcon = null;

    public JImagedPopupMenu(ImageIcon imageIcon) {
        this.imageIcon = imageIcon;
    }

    public JImagedPopupMenu(String text) {
        this.imageIcon = createImage(text);
    }

    private ImageIcon createImage(String text) {
        BufferedImage bi = new BufferedImage(30, 1000, BufferedImage.TYPE_INT_ARGB);
        ImageIcon image = new ImageIcon(bi);
        Graphics2D g2d = bi.createGraphics();

        GradientPaint paint = new GradientPaint(0, 0, Color.yellow, 30, 10, Color.red, true);
        g2d.setPaint(paint);

        g2d.fillRect(0, 0, bi.getWidth(), bi.getHeight());

        AffineTransform at = new AffineTransform();
        at.rotate( -Math.PI / 2);

        g2d.setTransform(at);
        g2d.setColor(Color.white);
        g2d.setFont(font);
        g2d.drawString(text, -180, bi.getWidth() / 2);

        return image;
    }

    public Insets getInsets() {
        Insets insets = (Insets)super.getInsets().clone();
        insets.left += imageIcon.getIconWidth();
        return insets;
    }

    public void paint(Graphics g) {
        super.paint(g);
        if (imageIcon != null) {
            Insets insets = getInsets();
            g.drawImage(imageIcon.getImage(),
                        insets.left - imageIcon.getIconWidth(),
                        insets.top,
                        null);
        }
    }

    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setSize(600, 500);
        frame.setTitle("ImageMenu");
        final JImagedPopupMenu menu = new JImagedPopupMenu("Windows XP Perfessional");
        menu.add(new JMenuItem("Winzip 8.0"));
        menu.addSeparator();
        menu.add(new JMenuItem("Programs"));
        menu.add(new JMenuItem("Document"));
        menu.add(new JMenuItem("Settings"));
        menu.add(new JMenuItem("Search"));
        menu.add(new JMenuItem("Help and Support"));
        menu.add(new JMenuItem("Run..."));
        menu.addSeparator();
        menu.add(new JMenuItem("Shut Down..."));
        JLabel label = new JLabel("Right click me to show image popup menu.");
        label.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(MouseEvent e) {
                if (e.isPopupTrigger()) {
                    menu.show(frame, e.getPoint().x, e.getPoint().y);
                }
            }
        });
        frame.getContentPane().add(label, BorderLayout.CENTER);
        frame.show();
    }
}

运行效果如下:

JImagedPopupMenu

同样,采用这种方法,也可以将JMenu扩展出同样的效果。

 

Java项目介绍及创建 无论您是一个有经验的开发者还是一个初学者,都可以通过探索不同类型的Java项目来提升自己的技能,并为实现创意和解决问题提供强大的工具。无论您是开发Web应用程序、移动应用程序还是桌面应用程序,Java都可以成为您的首选语言,为您的项目提供强大的支持。希望本文能够为您提供有关Java项目的基本介绍和创建过程的指导,并激发您对Java开发的热情。选择一个适合您的需求和喜好的IDE,并进行安装。无论您开发什么类型的Java项目,都可以利用Java的丰富库和框架来简化开发过程,并提高项目的可维护性和扩展性。 阅读详情

相关推荐

Java+Swing计算器实现项目详解

本文还有配套的精品资源,点击获取 简介:本文详细介绍了如何利用Java语言和Swing图形用户界面库开发一款具有基本计算功能和保存计算历史功能的计算器。通过这个项目,开发者可以加深对Java面向对象编程和Swing组件使用技巧的理解,同时学习到事件处理、计算逻辑、设计模式应用、错误处理、文件I/O、UI样式设计以及测试与调试等多方面的知识。 1. Java面向对象...

weixin_31185473的博客 1602

Java Swing 图形用户界面——菜单条、菜单与菜单项

带菜单项的窗口: 具体使用方法见代码及注释: Test_Menu.java public class Test_Menu { public static void main(String args[]) { Menu menu = new Menu("菜单"); menu.setBounds(10, 10, 300, 200); } } Menu.

yangzheng'Blog 1万+

Java Swing开发的GIF压缩工具使用指南

Java Swing是Java编程语言提供的一个用于开发图形用户界面(GUI)的工具包,它允许开发者创建窗口化的应用程序。Swing框架独立于平台,这意味着相同的应用程序可以在不同的操作系统上运行而不需要修改代码。为了提升用户体验,根据应用程序的主题和风格定制组件的外观是很常见也很重要的需求。Swing 提供了丰富的组件属性和方法来实现自定义样式。例如,可以修改JButton的字体和背景色:在这个示例中,我们创建了一个按钮并对其字体样式、背景色和前景色进行了定制。

weixin_30951515的博客 855

Swing绘制带图片的JMenuItem

<br />在很多软件中,为了给用户更好的界面,很多时候在菜单栏的菜单选项都要添加图片,但在JAVA默认的JDK中的JMenuItem无法实现该功能,所以我们要继承这个类,并实现这个功能,下面我将给出详细的代码,和运行结果<br /> <br />我们先创建一个类ImageMenu来继承JMenuItem<br /> <br />代码如下:<br /> <br />import java.awt.Graphics;<br />import java.awt.Image;<br />import java.a

Sean's Blog 1511

Java课程设计:打造Swing学生信息管理系统的综合教程

接下来,我们将详细介绍几个常用的Swing组件:对于高级的自定义需求,可以使用Border为组件添加边框,使用控制组件的透明度,以及创建新的组件类来扩展JComponent的功能。自定义的JPanel组件示例代码:该代码段创建了一个面板,并将标签放置在面板的不同区域中。在实际应用中,可以利用事件链机制来实现更为复杂和丰富的用户交互。例如,在一个文本编辑器中,可以为文本字段注册多个监听器,如一个处理文本输入,另一个处理文本格式化等。

weixin_36382073的博客 878

探索Java GUI编程:构建交互式用户界面

本文深入探讨了Java GUI编程的核心概念与实践技巧。从内部类对象与顶级类对象之间的关系,到使用JOptionPane进行文本输入与消息显示,再到自定义绘图区域的创建,以及事件处理和组件布局的管理。文章详细介绍了如何使用Swing组件创建窗口、文本和图像的显示、状态按钮的使用、事件监听器接口的实现以及如何添加图形到GUI应用程序中。

weixin_35391606的博客 273

Java swing 搭建图形用户界面一:(窗口与菜单)

前言 java 的优势在于网络编程与多线程,但其作为一门全场景语言,依然提供了强大的GUI开发API,这·些API封装在jaivax.swing中,通过命令javax.swing.*导入包中。 这一系列通过3~5篇文章,以可运行代码为例简单介绍Swing基础及其用法。 基础 以下是Java GUI编程中常常需要用到的概念: 窗口: 一个GUI程序应当提供一个能结合操作系统进行人机交互的东东,这个东西就是窗口。Java提供JFream类的实例就是一个...

算法、原理、设计模式、非线性控制、深度强化学习 8214

JAVA图形用户界面拼图游戏开发实践

本文还有配套的精品资源,点击获取 简介:本项目为一个基于JAVA的拼图游戏,用户可以选择图片和难度,并有计时功能。通过这个实践案例,初学者可以学习JAVA GUI编程、图像处理、事件处理和算法设计。游戏利用Swing库和定时器来创建一个交互式体验,开发者通过调整拼图块的数量和打乱顺序程度来设置难度,同时代码注释帮助理解和实现各个功能。 1. JAVA GUI编程基...

weixin_42581846的博客 1118

《深入探索 Java Swing:构建强大的图形用户界面》

Java Swing 是一个功能强大的 GUI 工具包,它提供了丰富的组件、布局管理器和事件处理机制,使得开发者能够轻松地创建出美观、交互性强的应用程序。通过深入了解 Swing 的基本概念、组件、布局管理器、事件处理以及高级特性,开发者可以充分发挥 Swing 的优势,开发出高质量的 GUI 应用程序。同时,结合实际应用案例,可以更好地理解和掌握 Swing 的使用方法。在实际开发中,开发者可以根据具体需求选择合适的组件和布局管理器,进行灵活的界面设计,并通过事件处理机制实现用户与应用程序的交互。

m0_72256543的博客 1205

JAVA SWING可折叠菜单

JAVA SWING可折叠菜单

Ansys Zemax与Speos协同设计:HUD系统从光学优化到驾驶模拟的全流程解析

本文详细解析了如何利用Ansys Zemax与Speos这对“黄金搭档”进行HUD系统的协同设计。流程始于Zemax进行核心光学架构与像差优化,奠定性能基础;随后将设计无缝导入Speos,通过HUD光学分析模块进行量化验证;最终在虚拟驾驶环境中进行沉浸式模拟,评估实际视觉体验与系统集成效果,实现从光学优化到驾驶模拟的全流程闭环。

weixin_29201933的博客 274

Java Swing制作大鱼吃小鱼魔改版本

大鱼吃小鱼》这款游戏的历史渊源可以追溯到休闲游戏的兴起和发展。在游戏的早期发展阶段,开发者们开始探索各种简单而有趣的游戏玩法,以吸引玩家的注意力。在这样的背景下,《大鱼吃小鱼》应运而生,它结合了自然界的食物链原理与休闲游戏的轻松氛围,为玩家带来了一种新颖而有趣的游戏体验。具体来说,这款游戏以神秘的海底世界为背景,让玩家扮演一条小鱼,通过不断吞噬比自己小的鱼类来逐渐成长,最终成为海洋中的霸主。在游戏中,每一关卡都设有玩法提示和海洋鱼类知识学习,使玩家在娱乐的同时也能学习到一些有关海洋生物的知识。

qq_43646281的博客 1256

TC275-AutoSAR实战:Davinci Cfg多核OS配置与调试技巧

本文详细介绍了在TC275芯片上使用Davinci Cfg工具进行AutoSAR多核操作系统配置的实战步骤与调试技巧。内容涵盖从导入arxml文件的常见“坑”开始,到配置Det、EcuC、创建多核OS实例、关联OS应用、创建任务与设置优先级调度,最后分享了利用Det日志、调试器多核视图及处理核间通信与缓存一致性等关键调试方法,旨在帮助开发者高效完成复杂车载ECU软件集成。

weixin_29219189的博客 489

【亲测免费】 探索跨平台的系统托盘解决方案:SystemTray

探索跨平台的系统托盘解决方案:SystemTray 项目简介 SystemTray 是一个专业的、跨平台的 Java 库,为 Swing/AWT 提供了系统托盘的支持,并在 Linux、Unix、Windows 和 MacOS 上实现了原生功能。它解决了各种操作系统和桌面环境下的兼容问题,以及在不同平台上实现一致的用户体验的挑战。 项目技术分析 SystemTray 自动检测并选择最适合当前操作系...

gitblog_00054的博客 769

Element Server Suite社区版Helm部署:私有Matrix聊天服务器快速搭建指南

在云原生和微服务架构日益普及的今天,容器化部署已成为现代应用交付的标准范式。Kubernetes作为容器编排的事实标准,通过声明式配置和自动化管理,极大地简化了复杂分布式系统的部署与运维。Helm作为Kubernetes的包管理器,通过预定义的Chart模板,将应用及其依赖打包,实现了真正的“一键部署”,显著提升了部署效率和可重复性。这种技术组合的价值在于,它让开发者能够专注于业务逻辑,而非底层基础设施的复杂性,尤其适用于需要快速搭建、易于维护的服务场景。Element Server Suite Commu

weixin_42610010的博客 300

Solidworks曲面建模学习(三)——样条曲线

本文主要演示平面的空间样条曲线的一些绘制。

东东不熬夜的博客 6504

【Java Swing应用程序打包成EXE文件】

然后,使用一个for循环遍历1到n之间的所有奇数,累加它们的和,并统计个数。在“输出类型”字段中选择“窗口化”选项,以便将Java应用程序打包为带有图形用户界面的EXE文件。在“Java运行时环境”字段中点击“浏览”按钮,选择您的Java运行时环境(JRE)的安装路径。在“JAR”字段中点击“浏览”按钮,选择您的Java应用程序的JAR文件。在“图标”字段中,点击“浏览”按钮,选择您要用作应用程序图标的图像文件。在“输出文件”字段中指定要生成的EXE文件的路径和文件名。在弹出的对话框中,点击“选项”标签。

qq_31532979的贺公子之数据科学与艺术博客,致力于科技向善,拥抱开源,要用技术的影响力来领导团队,而不是威权和职位! 1484

2025.06.25【微生物】|Emu工具安装与使用详解:全长16S扩增子微生物丰度分析

Emu是一款基于贝叶斯方法的微生物多样性分析工具,专为处理高错误率的长读长16S/18S扩增子数据优化。本文详细介绍了Emu的安装与使用方法:1)通过conda创建独立环境并安装Emu;2)提供SILVA等预构建数据库的下载指南,并说明自定义数据库的构建方法;3)演示单样本和多样本分析流程,解读关键输出文件;4)介绍丰度表合并、分类等级汇总等实用功能扩展;5)建议后续分析方向。文章还附有官方GitHub链接和相关文献资源,为微生物群落结构研究提供了一套完整的分析解决方案。

1256

Java 中文官方教程 2022 版(十二)

原文:docs.oracle.com/javase/tutorial/reallybigindex.html 设置 CelsiusConverter 项目 原文:docs.oracle.com/javase/tutorial/uiswing/learn/settingup.html 如果您以前使用过 NetBeans IDE,那么本节的大部分内容看起来会很熟悉,因为最初的步骤对大多数项目都是相似的。不过,接下来的步骤描述了特定于此应用程序的设置,因此请务必仔细遵循。 步骤 1:创建一个新项目 要创建

龙哥盟 1601

rk3568 修改开机动画

bootanimation.zip是一个Android设备启动时播放的动画文件,它包含了一系列的图片和描述文件,用于描述动画的播放顺序和持续时间。

weixin_35723192的博客 2729

52-Halcon-- smooth_object_model_3d函数功能(滑处理3D对象模型)

Halcon中smooth_object_model_3d算子详解 该算子用于3D模型平滑处理,提供三种算法:'laplacian'(快速去噪)、'taubin'(高质量防收缩)和'low_pass'(频域滤波)。核心参数包括迭代次数(默认5)、平滑强度(0-1)和边缘保护选项。典型应用包括扫描数据去噪、CAD模型光顺和逆向工程优化。支持自适应平滑、结合模型简化等高级技巧,并可通过分块处理优化大型模型性能。参数组合需根据具体场景选择,如快速去噪推荐拉普拉斯方法(5次迭代,强度0.3),特征保持推荐低通滤波(

weixin_45590420的博客 873

实训第九天的心得体会:探索JAVA图形界面与事件处理的世界

我们不仅了解了JFrame类的构造方法和常用操作方法,例如设置窗口标题、大小、位置,以及窗口关闭时的行为控制等,还实践了如何使用Dimension类和Point类精确地设定组件的尺寸和显示位置。此外,还接触到了复选框(JRadioButton)、单选按钮组(ButtonGroup配合JRadioButton使用)、复选框(JCheckBox)等用于数据选择的组件,以及菜单组件(JMenu和JMenuItem)和表格组件(JTable)等复杂UI元素,理解了它们在复杂应用界面设计中的重要性及其用法。

weixin_74620383的博客 865

低功耗设计:如何计算power switch的数量?

power switch加多了漏电高,加少了ir drop会有问题,具体加多少合适要如何计算呢?这里可以给一个参考方式。 第一步,先选switch cell的类型 通常选用HVT类型的switch cell,优点是漏电更低,缺点也很明显,电阻大,压降也大,switch cell的大小选择,可以选择(开启电阻x面积)最小的switch cell,即单位面积提供最小并联电阻的cell类型。 第二步,计算数量 选好类型,确定了开启电阻,可以按照如下公式计算数量: Ron/Xnum • W/V = V•P

m0_61544122的博客 3577

提升远程开发效率:projector-client的10个实用技巧与最佳实践

在当今分布式团队和远程工作日益普及的时代,**远程开发工具**已成为开发者提升工作效率的关键。JetBrains Projector-client作为一款强大的**Swing应用远程访问**解决方案,让开发者能够在浏览器中无缝运行桌面级开发工具。无论您是需要远程访问IntelliJ IDEA、PyCharm还是其他基于Swing的应用程序,掌握projector-client的使用技巧都能显著提升

gitblog_00258的博客 610

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

下一篇: Swing探索:创建带图标和缩进的JComboBox
solo
博客等级 码龄27年 35粉丝 34原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值