首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >向Java Swing菜单添加静态文本的最佳方法是什么?

向Java Swing菜单添加静态文本的最佳方法是什么?
EN

Stack Overflow用户
提问于 2013-06-05 01:55:09
回答 2查看 3.4K关注 0票数 1

我想在弹出菜单中包括一些静态文本。我希望它看起来像任何其他菜单项,只是不可选。我尝试过的方法:

  • 将禁用的JMenuItem添加到菜单。虽然这会产生正确的字体和对齐方式,但它会使文本呈现为浅灰色,并且几乎是菜单的unreadable.
  • Add a JLabel。这看起来很丑陋;标签使用与常规菜单项不同的字体,并且对齐方式不同(菜单项为左侧图标留出空间,标签不会这样做)。

JPopupMenu popupMenu =新建JPopupMenu();JLabel label =新建标签(“静态文本”);popupMenu.add(标签);JMenuItem menuItem =新建JMenuItem(“禁用菜单项”);menuItem.setEnabled(false);popupMenu.add( menuItem );menuItem=新建JMenuItem(“常规项”);false

如果菜单使用与常规菜单项相同的字体和对齐方式,但不可选,不接受键盘焦点,并且当鼠标悬停在菜单上时不突出显示,我是否错过了向该菜单添加静态文本的其他方法?

EN

回答 2

Stack Overflow用户

发布于 2013-06-05 02:43:16

下面的代码对我来说很好。只需将JLabel添加到JPanel,并将JPanel添加到您的JPopupMenu

代码语言:javascript
复制
JPanel panelLabel = new JPanel();       
JLabel lblSomeText = new JLabel("Some text");
lblSomeText.setFont(menuItem.getFont());
lblSomeText.setForeground(menuItem.getForeground());
panelLabel.add(lblSomeText);
popupMenu.add(panelLabel);
票数 1
EN

Stack Overflow用户

发布于 2018-09-12 04:56:32

对于OP来说已经晚了几年了,但是要实现同样的目的而不必纠结于L&F猜测,一种简单的方法是删除当鼠标经过按钮时突出显示该按钮的事件侦听器。

代码语言:javascript
复制
JMenuItem menuItem = ......
if (menuItem.getModel() instanceof DefaultButtonModel) {
    DefaultButtonModel model = (DefaultButtonModel)menuItem.getModel();
    model.setArmed(false);
    for (ChangeListener cl : model.getChangeListeners()) {
        //System.err.format("yep, removing %s%n", cl);
        model.removeChangeListener(cl);
    }
}
menuItem.setFocusable(false);
menuItem.setForeground ....
menuItem.setBackground ....
menuItem.setFont ....
menuItem.setHorizontalAlignment ....

请注意,这有点极端,因为如果有任何其他事件侦听器注册在“按钮,现在是一个标签”,他们也将被no,并且没有任何有意义的方法来区分它们。

你也可以做一个JLabel,但是当然你需要做很多的定位和绘制,而JMenuItem/AbstractButton代码和L&F已经为你完成了。

(不要被Swing中的“翻转”功能所误导;它通常只适用于这类事情,但不用于菜单和菜单项。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16924383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档