我想知道如何更改上下文菜单中显示的文本的字体,该字体源自右键单击 JFrames 标题栏左侧的图标,该图标使用默认外观进行装饰(JFrame.setDefaultLookAndFeelDecorated(true);
)。
我四处寻找,一无所获。我认为我可以使用我学到的关于更改标题栏标题字体的知识,但这并没有奏效。
提前致谢。
我想知道如何更改上下文菜单中显示的文本的字体,该字体源自右键单击 JFrames 标题栏左侧的图标,该图标使用默认外观进行装饰(JFrame.setDefaultLookAndFeelDecorated(true);
)。
我四处寻找,一无所获。我认为我可以使用我学到的关于更改标题栏标题字体的知识,但这并没有奏效。
提前致谢。
又折腾了几下,终于成功了!我非常喜欢 Java,以至于让我有点难过做这样的事情有多难。无论如何,我在这里找到了一种方法,可以从 JFileChooser 递归更改所有组件的字体,但它不适用于从标题栏图标弹出的 JPopupMenu(现在我知道名称)。所以我弄乱了那个方法,使用了一些转换,并且能够改变 JMenuItems 的字体:
public static void setSubComponentFont (Component comp[], Font font) {
for (int x = 0; x < comp.length; x++) {
if (comp[x] instanceof Container) {
setSubComponentFont(((Container)comp[x]).getComponents(), font);
}
try {
//comp[x].setFont(font);
if (comp[x].toString().contains("JMenu")) {
for (Component y : ((JMenu)comp[x]).getPopupMenu().getComponents()) {
if (y.toString().contains("JMenu")) {
y.setFont(font);
}
}
}
} catch (Exception ex) {}
}
}
.toString().contains()
我被这个线程启发使用。
我也使用嵌套循环执行此操作,因此可以看到菜单项的路径:
for (Component a : frame.getLayeredPane().getComponents()) {
System.out.println(a.toString());
if (a.toString().contains("MetalTitlePane")) {
for (Component b : ((Container)a).getComponents()) {
System.out.println(b.toString());
if (b.toString().contains("SystemMenuBar")) {
for (Component c : ((Container)b).getComponents()) {
System.out.println(c.toString());
for (Component d : ((JMenu)c).getPopupMenu().getComponents()) {
System.out.println(d.toString());
if (d.toString().contains("JMenu")) {
d.setFont(font);
}
}
}
}
}
}
}
每个都System.out.println()
暗示了在以下条件下应该做什么if
,因此应该一次使用一个。不过,这不适用于 JFileChooser 的标题字体。当我有时间时,我会进一步研究它或问另一个问题。
所以,如果其他人像我一样需要它,就在这里。作为提示,System.out.println()
并且.toString()
是您的朋友!这就是我如何了解每个对象中包含的内容,以及我需要采取什么路径才能到达感兴趣的对象。
不管怎么说,还是要谢谢你!