Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替代单个组件的Swing外观_Java_Swing_Look And Feel - Fatal编程技术网

Java 替代单个组件的Swing外观

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)); 看来无论我用什么颜色,我都能得到相同的结果。我怀疑是外观和感觉改变了我的颜色 我找到的所有解决方案都讨论了更改外观或设置新的默认值。我不想采用这种方法,因为:

我正在为一个Swing应用程序编写一个插件,我不拥有或无法访问它的源代码。在我的UI中,我想使用特定的颜色来匹配我的图标

在本例中,我想创建一个具有特定背景颜色的
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。我不能单独用代码来演示这个问题。完全同意你的观点