Substance外观使我的颜色更亮?

14
我想调用JPanelsetBackground方法,使其颜色与我的JFrame相匹配,但颜色比我输入的要亮一些。

我尝试了设置HSB、RGB、HEX代码,它们都给我同样的颜色,一个更亮的版本。

不知道如何获得我想要的颜色?

编辑:

我从Photoshop中获取颜色。我查找正确的颜色(我想要的)并复制HSB RGB或HEX代码。在Photoshop中看起来正常,但Java给我一个更亮的颜色?enter image description here

我已使用以下Java代码:

Color color = new Color(0x94b3c7); 

    jpanel.setBackground(color);

11
Java 让你更加聪明 :) - dacwe
7
您需要提供一个SSCCE - aioobe
1
你的标题很棒,但是你必须提供一个示例(正如aioobe所指出的那样),并且需要告诉我们你从哪里获取了该值,你尝试设置的颜色以及为什么你认为它应该与它现在的样子不同。它有alpha值吗? - Joachim Sauer
谢谢,我会查看 SSCCE。 - Handsken
3
你的Photoshop设置的颜色证明和你的显示器不同吗? - clamp
显示剩余5条评论
3个回答

11

Substance会“着色”你的背景颜色,以尝试添加一些主题颜色。如果您使用了不同的皮肤,您将获得不同的结果。例如,秋季皮肤将使事物变得非常橙色。可以通过设置客户端属性org.pushingpixels.substance.api.SubstanceLookAndFeel#COLORIZATION_FACTOR1.0来逐个更改每个组件的这种效果。例如:

frame.putClientProperty(SubstanceLookAndFeel.COLORIZATION_FACTOR, 1.0)

这将指示后台绘制使用用户指定的背景颜色的100%,而不是使用颜色的50%。

这也可以全局设置...

UIManager.put(SubstanceLookAndFeel.COLORIZATION_FACTOR, 1.0);

同样,受到每个组件覆盖的影响。如果没有设置,则默认的着色因子是0.5


太好了!我会立即测试它,这可能是我得到这个问题答案的最接近方式。 - Handsken

6

这个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问题。

1
太好了!我尝试了你的代码,成功得到了正确的颜色。在我的代码中花费了一些时间,但我认为我找到了问题所在。 我正在使用一个 JFrame 的皮肤: import org.pushingpixels.substance.api.skin.SubstanceBusinessBlueSteelLookAndFeel; - Handsken
当我不使用外观更好的JFrame时,它可以工作,但是那时我不需要它工作。我对这个事实感到不满意 :( - Handsken
1
这可能是一个“不透明”的问题。我修改了我的示例代码,将JPanel和JLabel的opaque设置为true。面板现在应该是绿色的,标签是所需的颜色(0x94b3c7)。 - Steve McLeod

3

我已经找到了问题所在。这实际上相当令人恼火,我可能应该在问题中添加这个,但我从来没有想过这会导致问题。

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

它是 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) {
            }
        }
    });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接