java menuitem 图标_java-在JMenuItem中的图标和文本之间插入垂直分隔符

该问题探讨了如何在Java Swing的JMenuItem组件中实现图标和文本之间的垂直分隔符。作者提到JMenu组件默认在Windows7的外观下有此效果,但JMenuItem没有。尝试设置LayoutManager为BorderLayout并未产生预期效果。解决方案是通过设置LookAndFeel为系统的LookAndFeel,特别是在Windows7上,可以得到所需的效果。
摘要由CSDN通过智能技术生成

我试图在我的应用程序的JMenuItem组件的图标和文本之间插入/显示垂直分隔符.我大致创建了一个JMenuItem,如下所示:

JMenuItem cutMenuItem = new JMenuItem();

cutMenuItem.setName("cutMenuItem");

cutMenuItem.setRequestFocusEnabled(false);

cutMenuItem.setText("cut");

cutMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK));

当我查看菜单中的项目时,它们显示如下:

有趣的是,我注意到JMenu组件的默认外观与我想要的外观相匹配:

自然,将我所有的JMenuItem组件更改为JMenu组件都不是可接受的解决方案.如何在应用程序中使JMenuItem组件在图标和文本之间具有垂直分隔符/边框?

这取决于L& F吗?作为记录,我在Windows 7计算机上.我尝试将JMenuItem对象上的LayoutManager设置为BorderLayout:

cutMenuItem.setLayout(new BorderLayout(5,0));

期望看到图标和文本之间存在水平间隙,但这似乎没有什么区别.

编辑:这是一个非常基本的SSCCE

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

import javax.swing.KeyStroke;

import javax.swing.UIManager;

import java.awt.Dimension;

import java.awt.event.KeyEvent;

public class FakeApp {

public static void main(String args[]) {

JFrame frame = new JFrame();

JMenuBar menuBar = new JMenuBar();

JMenu menu = new JMenu("Menu");

JMenuItem menuItem = new JMenuItem();

menuItem.setName("cutMenuItem");

menuItem.setRequestFocusEnabled(false);

menuItem.setText("cut");

menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK));

menuItem.setIcon(UIManager.getIcon("OptionPane.errorIcon"));

menu.add(menuItem);

menuBar.add(menu);

frame.getRootPane().setJMenuBar(menuBar);

frame.add(new JPanel());

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setPreferredSize(new Dimension(300, 300));

frame.pack();

frame.setVisible(true);

}

}

解决方法:

如果仅将L& F设置为Windows 7上的系统L& F,您将获得所需的效果:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

还是您想在所有平台/ L&F上使用它?

标签:look-and-feel,swing,jmenuitem,java

来源: https://codeday.me/bug/20191201/2082012.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值