我想在弹出菜单中包括一些静态文本。我希望它看起来像任何其他菜单项,只是不可选。我尝试过的方法:
JPopupMenu popupMenu =新建JPopupMenu();JLabel label =新建标签(“静态文本”);popupMenu.add(标签);JMenuItem menuItem =新建JMenuItem(“禁用菜单项”);menuItem.setEnabled(false);popupMenu.add( menuItem );menuItem=新建JMenuItem(“常规项”);false
如果菜单使用与常规菜单项相同的字体和对齐方式,但不可选,不接受键盘焦点,并且当鼠标悬停在菜单上时不突出显示,我是否错过了向该菜单添加静态文本的其他方法?
发布于 2013-06-05 02:43:16
下面的代码对我来说很好。只需将JLabel添加到JPanel,并将JPanel添加到您的JPopupMenu
JPanel panelLabel = new JPanel();
JLabel lblSomeText = new JLabel("Some text");
lblSomeText.setFont(menuItem.getFont());
lblSomeText.setForeground(menuItem.getForeground());
panelLabel.add(lblSomeText);
popupMenu.add(panelLabel);
发布于 2018-09-12 04:56:32
对于OP来说已经晚了几年了,但是要实现同样的目的而不必纠结于L&F猜测,一种简单的方法是删除当鼠标经过按钮时突出显示该按钮的事件侦听器。
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中的“翻转”功能所误导;它通常只适用于这类事情,但不用于菜单和菜单项。)
https://stackoverflow.com/questions/16924383
复制相似问题