【问题标题】:Substance Look and Feel is making my colors brighter?Substance Look and Feel 让我的颜色更亮?
【发布时间】:2011-11-30 13:03:07
【问题描述】:

我正在尝试在JPanel 上调用setBackground,以便它与我的JFrame 的颜色相匹配,但颜色比我输入的颜色要亮一些。

我尝试过设置 HSB、RGB、HEX 代码,它们都给了我相同的颜色,比我的颜色更亮。

不太清楚如何获得我想要的颜色?

编辑:

我从 Photoshop 中获取颜色。我查找正确的颜色(我想要的)并复制 HSB RGB 或 HEX 代码。它在 Photoshop 中看起来应该是这样,但是 java 给了我更亮的颜色?

我用过java代码:

Color color = new Color(0x94b3c7); 

    jpanel.setBackground(color);

【问题讨论】:

  • Java 让你更聪明:)
  • 您需要提供SSCCE
  • 您获得了对该标题的支持,但您需要提供一个示例(如 aioobe 所述)并且需要告诉我们您从哪里获得值,您尝试设置的哪种颜色以及您认为它应该看起来与实际不同的为什么。它有 alpha 值吗?
  • 谢谢你,我会调查SSCCE
  • 会不会是您的 Photoshop 设置的颜色样张与您的显示器不同?

标签: java swing jpanel look-and-feel substance


【解决方案1】:

所以我找到了问题所在。这实际上有点烦人,我可能应该在问题中添加这个,但我从没想过这是导致问题的原因。

我正在使用来自网页 http://www.pushing-pixels.org 的名为 Substance.api 的东西

它是 GUI 的颜色皮肤,我的意图是改变 JFrame 的颜色,但我改变了整个颜色证明。

因此,如果有人知道如何更改 JFrame 颜色,请对我吼! :)

这是强盗代码:

public static void main(String[] args) {

    JFrame.setDefaultLookAndFeelDecorated(true);
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            try {
                UIManager.setLookAndFeel(new SubstanceRavenLookAndFeel());
            } catch (Exception e) {
            }
        }
    });
}

【讨论】:

    【解决方案2】:

    Substance 正在“着色”您的背景颜色以尝试添加一些主题颜色。如果你使用不同的皮肤,你会得到不同的结果。例如,秋天的皮肤会使事情变得非常橙色。这可以通过将客户端属性org.pushingpixels.substance.api.SubstanceLookAndFeel#COLORIZATION_FACTOR 设置为1.0,在每个组件的基础上进行更改。例如:

    frame.putClientProperty(SubstanceLookAndFeel.COLORIZATION_FACTOR, 1.0)
    

    这将指示背景画家使用 100% 的用户指定背景颜色,而不是使用 50% 的颜色。

    这也可以全局设置...

    UIManager.put(SubstanceLookAndFeel.COLORIZATION_FACTOR, 1.0);
    

    同样,取决于每个组件的覆盖。如果不设置默认着色因子为0.5

    【讨论】:

    • 太棒了!将立即对其进行测试,我认为最接近这个问题的答案。
    【解决方案3】:

    此 SSCCE 显示 Photoshop 示例中的颜色:

    public class ColorTest {
    
        public static void main(String[] args) {
            JLabel label = new JLabel("Java Color");
            label.setFont(label.getFont().deriveFont(20f));
            label.setForeground(Color.WHITE);
            label.setBackground(new Color(0x94b3c7));
            label.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
            label.setOpaque(true);
    
            JPanel jpanel = new JPanel();
            jpanel.setOpaque(true);
            jpanel.add(label);
            jpanel.setBackground(Color.GREEN);
    
            JFrame frame = new JFrame();
            frame.setContentPane(jpanel);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    }
    

    也许这有助于向您展示您应该如何设置颜色以获得您想要的?

    编辑:现在添加了不透明的显式设置以尝试解决 Substance L&F 问题。

    【讨论】:

    • 太棒了!我试过你的代码,我得到了正确的颜色。在我的代码中进行了一些探索,但我认为我发现了问题。我为我的 JFrame 使用了皮肤:import org.pushingpixels.substance.api.skin.SubstanceBusinessBlueSteelLookAndFeel;
    • 当我不使用更好看的 JFrame 时,它​​可以工作,但我不需要它来工作。对事实不满意:(
    • 这可能是一个“不透明”的问题。我修改了我的示例代码,包括在 JPanel 和 JLabel 上将 opaque 设置为 true。面板现在应该是绿色的,标签是所需的颜色 (0x94b3c7)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多