【发布时间】:2015-06-14 04:02:50
【问题描述】:
我一直在四处寻找,但我还没有找到关于是否可以以及如何更改菜单栏的背景、文本、前景、选择和文本选择颜色的答案, Menu 和 MenuItem AWT 组件。
到目前为止,我已经尝试了以下解决方案,但都不会影响任何与菜单相关的组件的颜色。第一个解决方案只是尝试抓取组件并更改颜色,第二个解决方案尝试通过 UIManager 更改它。
// Just an example of what I did, this is not from the code I'm working with.
MenuBar bar = new MenuBar();
Menu menu = new Menu();
MenuItem item = new MenuItem();
bar.getAccessibleContext().getAccessibleComponent().setBackground(Color.RED);
bar.getAccessibleContext().getAccessibleComponent().setForeground(Color.BLUE);
menu.getAccessibleContext().getAccessibleComponent().setBackground(Color.RED);
menu.getAccessibleContext().getAccessibleComponent().setForeground(Color.BLUE);
item.getAccessibleContext().getAccessibleComponent().setBackground(Color.RED);
item.getAccessibleContext().getAccessibleComponent().setForeground(Color.BLUE);
--
UIManager.put("MenuItem.background", Color.RED);
UIManager.put("MenuItem.foreground", Color.BLUE);
我之前没有过多地使用 AWT 组件,如果答案很明显,请见谅。
更新:
如果您希望能够轻松更改组件颜色,似乎使用 AWT 组件只是一个坏主意。我将重构我的代码以消除尽可能多的 AWT 组件以支持 Swing 组件,我建议任何阅读本文的人尽可能这样做。
【问题讨论】:
-
Swing 和 AWT 是有区别的。你真的需要使用(过时的)AWT API 吗?
-
您是否尝试过只在组件本身(而不是可访问的组件)上调用 setBackground/foreground?
-
正如其他人建议的那样去摇摆,没有简单的方法来实现它与 awt
-
@MadProgrammer 在某些情况下,我确实需要使用 AWT 组件,但我设法重新编写代码以使用 JFrame 而不是 Frame。这解决了这个问题。据我所见,从 AWT 组件的方法中,我找不到简单或清晰的方法来更改组件颜色。
-
@Arvind 谢谢,到目前为止,我已经设法将代码的主要部分切换到 Swing。希望它不会引起任何奇怪的问题。 =P