Java 替代单个组件的Swing外观
我正在为一个Swing应用程序编写一个插件,我不拥有或无法访问它的源代码。在我的UI中,我想使用特定的颜色来匹配我的图标 在本例中,我想创建一个具有特定背景颜色的Java 替代单个组件的Swing外观,java,swing,look-and-feel,Java,Swing,Look And Feel,我正在为一个Swing应用程序编写一个插件,我不拥有或无法访问它的源代码。在我的UI中,我想使用特定的颜色来匹配我的图标 在本例中,我想创建一个具有特定背景颜色的JPanel final JPanel panel = new JPanel(); panel.setBackground(new Color(101, 102, 103)); 看来无论我用什么颜色,我都能得到相同的结果。我怀疑是外观和感觉改变了我的颜色 我找到的所有解决方案都讨论了更改外观或设置新的默认值。我不想采用这种方法,因为:
JPanel
final JPanel panel = new JPanel();
panel.setBackground(new Color(101, 102, 103));
看来无论我用什么颜色,我都能得到相同的结果。我怀疑是外观和感觉改变了我的颜色
我找到的所有解决方案都讨论了更改外观或设置新的默认值。我不想采用这种方法,因为:
UIManager
来确定它们到底是什么,只要它们添加了一个新主题,这一点就会中断
我对Swing不是很有经验,但是我觉得外观应该设置默认值,但是我手动设置的任何东西都应该生效。有没有办法将面板的背景设置为特定的颜色,而不管其外观如何?我将此归因于应用程序自定义外观中的一个bug(或一个功能)。如果我加载了新的外观和感觉,面板显示正确。作为一种解决方法,您可以创建一个自定义JPanel,覆盖paintComponent(Graphics g)以绘制背景色
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(0, 0, getWidth(), getHeight());
}
使用Nimbus Look and Feel时您是否遇到问题。那么请检查我的答案,看看是否有相同的问题
可能有些牵强,但您是否尝试将您创建的
JPanel
实例放在另一个JPanel
中,然后返回此新面板?可能这个应用程序正在强制您返回的容器使用特定的背景色。在虚拟包装器面板中包装“真实”面板可能会解决您的问题。在设置背景之前,您是否尝试过使用panel.setOpaque(true)
?此面板已经是我交给应用程序的面板的子组件。setOpaque
也没有什么好运气。要更快地获得更好的帮助,请发布一个演示该问题的。很多时候,只要创建SSCCE
就会发现问题。@zmb 1。LaF有时有自己的规则,代码顺序非常重要,就像how is SwingUtilities.updateComponentTreeUI(组件)一样;叫2。我不能单独用代码来演示这个问题。完全同意你的观点