我想知道如何更改上下文菜单中显示的文本字体,这些字体来自右键单击JFrames标题栏中左侧一直显示的图标,该图标使用默认的装饰外观( JFrame.setDefaultLookAndFeelDecorated(true);
)。
我四处搜寻,一无所获。我认为我可以使用我所学到的关于更改标题栏标题字体的知识,但这没有用。
提前致谢。
答案 0 :(得分:0)
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) {}
}
}
我受到this帖子使用.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
条件应该发生什么,所以应该一次使用一个System.out.println()
条件。但这对JFileChooser的标题字体不起作用。当我有时间时,我会深入研究或提出另一个问题。
所以,如果其他人像我一样需要它,那么它就是。作为提示,.toString()
和{{1}}是您的朋友!这就是我学习每个对象所包含内容的方式,以及我需要采取什么样的途径来获取感兴趣的对象。
非常感谢!