【问题标题】:Override Swing look and feel for a single component覆盖单个组件的 Swing 外观
【发布时间】:2013-09-18 15:48:03
【问题描述】:

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

在这种情况下,我想创建一个具有特定背景颜色的JPanel

final JPanel panel = new JPanel();
panel.setBackground(new Color(101, 102, 103));

似乎无论我使用什么颜色,我都会得到相同的结果。我怀疑是外观和感觉改变了我的颜色。

我发现的所有解决方案都讨论了更改外观或设置新默认值。我不想采用这种方法,因为:

  1. 很大程度上取决于当前的外观和感觉
  2. 它会影响应用程序中的所有面板,而不仅仅是我感兴趣的面板

该应用程序支持多种不同的主题(外观和感觉),因此即使我使用 UIManager 来确定它们的确切含义,一旦添加了新主题,它就会中断。

我对 Swing 不太熟悉,但我觉得外观应该设置默认值,但我手动设置的任何内容仍然应该生效。无论外观如何,有什么方法可以将面板的背景设置为特定颜色?

【问题讨论】:

  • 可能有点牵强,但是您是否尝试过将您创建的JPanel 实例放在另一个JPanel 中,然后返回这个新面板?也许这个其他应用程序正在为您返回的容器强制使用特定的背景颜色。将您的“真实”面板包装在一个虚拟包装面板中可能会解决您的问题。
  • 您在设置background 之前尝试过使用panel.setOpaque(true) 吗?
  • 这个面板已经是我要交给应用程序的面板的子组件。 setOpaque 也没有运气。
  • 如需尽快获得更好的帮助,请发布SSCCE 来说明问题。很多时候,只需创建SSCCE 就会发现问题。
  • @zmb 1. LaF 有时有自己的规则,代码顺序很重要,就像 SwingUtilities.updateComponentTreeUI(Component);称为 2。我无法仅用代码演示问题。完全是你的问题 == 同意 splungebob

标签: java swing look-and-feel


【解决方案1】:

我将此归结为应用程序自定义外观中的一个错误(或者可能是一个功能)。如果我加载新外观并感觉面板显示正确。

【讨论】:

    【解决方案2】:

    作为一种解决方法,您可以创建一个自定义 JPanel 来覆盖 paintComponent(Graphics g) 以绘制背景颜色。

        public void paintComponent(Graphics g) {
          super.paintComponent(g);
          g.setColor(Color.BLUE);
          g.fillRect(0, 0, getWidth(), getHeight());
        }
    

    【讨论】:

      【解决方案3】:

      您在使用 Nimbus Look-and-Feel 时遇到问题了吗?那么请在

      Changing the Look and Feel changes the color of JTextPane?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多