gpt4 book ai didi

java - 即使外观 UI 另有规定,如何强制 JPopupMenu 显示标题?

转载 作者:行者123 更新时间:2023-12-02 13:45:27 25 4
gpt4 key购买 nike

JPopupMenu 构造函数的 Javadoc 内容如下:

JPopupMenu

public JPopupMenu(String label)

Constructs a JPopupMenu with the specified title.

Parameters:
label - the string that a UI **may** use to display as a title for the popup menu.

关键词是“可能”。显然,在默认 UI 中,创建弹出菜单时会忽略此类标题。我非常希望在我的一些弹出菜单中使用这样的标题,无论 L&F 是否认为我应该这样做。我找不到实现这一目标的钩子(Hook)。显然,这被深埋在 UI 代码的某个地方。有没有办法覆盖这个默认值?

如果失败,我尝试添加禁用的菜单项作为菜单的第一项。问题是我失去了对其渲染的控制,并且它以“灰色”样式渲染,而不是显示为重要标题。如果我不禁用它,那么它会按照我想要的方式呈现,但可以选择,而标题则不会。

底线是,我如何强制 UI 显示我的标题,或者如果失败,如何在我拥有完全渲染控制的菜单顶部添加一个不可选择的菜单项?

最佳答案

我有类似的问题(我的意思是原来的问题)。我是这样解决的:

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.SwingConstants;

public class LabeledPopupMenu extends JPopupMenu
{
private String originalLabelText = null;
private final JLabel label;

private static String replaceHTMLEntities(String text)
{
if (-1 != text.indexOf("<") ||
-1 != text.indexOf(">") ||
-1 != text.indexOf("&"))
{
text = text.replaceAll("&", "&amp;");
text = text.replaceAll("<", "&lt;");
text = text.replaceAll(">", "&gt;");
}
return text;
}

public LabeledPopupMenu()
{
super();
this.label = null;
}

public LabeledPopupMenu(String label)
{
super();
originalLabelText = label;
this.label = new JLabel("<html><b>" +
replaceHTMLEntities(label) + "</b></html>");
this.label.setHorizontalAlignment(SwingConstants.CENTER);
add(this.label);
addSeparator();
}

@Override public void setLabel(String text)
{
if (null == label) return;
originalLabelText = text;
label.setText("<html><b>" +
replaceHTMLEntities(text) +
"</b></html>");
}

@Override public String getLabel()
{
return originalLabelText;
}
}

我只在 Mac 上使用默认 L&F 测试过它,但它对我有用:

public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setSize(100, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(100, 100);
frame.setVisible(true);

LabeledPopupMenu myPopup = new LabeledPopupMenu("Say & <something>");
myPopup.add(new JMenuItem("Sample item"));
myPopup.show(frame, 50, 50);
}

关于java - 即使外观 UI 另有规定,如何强制 JPopupMenu 显示标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8546073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com