在Java中使用setBackground(new Color())无法识别给定的RGB值。

6

我有一个带有图形用户界面的程序,在JFrame上设置了以下内容:

 setBackground( new Color(107, 106, 104) );

问题在于我得到的是灰色调,而不是正确的颜色。如果我在PhotoShop中检查它,它会给我RGB值(126, 125, 123)。
附:我已尝试使用HEX值,但结果相同。

2
为了更快地获得更好的帮助,请发布一个SSCCE - Andrew Thompson
我希望该颜色为灰色,因为RGB值非常接近。只要每个值“相似”,在0,0,0(黑色)和255,255,255(白色)之间的颜色都是“灰色”。 - Adam
可能是因为Java使用sRGB而不是RGB吗? :P - JW_
在官方的Bug跟踪器上提交了Bug报告,但实际上这并不是一个Bug。 - lxbndr
7个回答

9
I have a program with some gui, on the JFrame I set,

 setBackground( new Color(107, 106, 104) );

[The problem] It gives a greyish color, but not the right one! 
If I check the gui's color in Photo Shop, it gives me the RGB 
values (126, 125, 123)

JFrame中不能使用setBackground方法,该方法仅适用于ContentPane。例如:

JFrame#getContentPane.setBackground(new Color(107, 106, 104));

编辑

这里输入图片描述

来自代码

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Check extends JFrame {

    private static final long serialVersionUID = 1L;

    public void makeUI() {
        JFrame f = new JFrame();
        f.getContentPane().setBackground(new Color(107, 106, 104));
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
        f.setSize(new Dimension(300, 200));
        f.setVisible(true);
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Check().makeUI();
            }
        });
    }
}

它在一个继承JFrame的类的构造函数中吗? - JW_
mKorbel,我已经测试了您的代码,它完美地运行。但是用我的方法却无法工作,我不知道原因在哪里。 - JW_
@JW_ 这就是我们要求提供 SSCCE 的原因,没有人知道发生了什么... :-) - mKorbel
@mKorbel的结果使用Zoom进行了验证。我怀疑是合成模式出了问题。 - trashgod
正确的答案是需要在setBackground()上调用getContentPane()。 - JW_

1

查看Adam的评论,即使没有起作用,那么在没有任何工作代码的情况下,我只是猜测这种情况是由于零订购或JFrame的布局而引发的。 实际上,在Java Swing中,设置背景颜色需要更多的注意,可以查看Swing Java文档。


0
我已经尝试了你所解释的内容,在awt中没有问题,在swing中似乎背景没有正确设置。你检查过背景是否改变,例如使用setBackground(Color.red)吗?
示例代码:
import java.awt.*;
import javax.swing.*;

public class Tmp extends Frame { public static void main(String[] args) {
    //Frame tmp = new Frame();
    Frame tmp = new JFrame();
    tmp.setBackground(new Color(107, 106, 104));
    tmp.setSize(40,40);
    tmp.setVisible(true);
}}

0
第一步 - 创建一个 jFrame 对象:
JFrame frame = new JFrame();

第二步:

frame.getContentPane().setBackground(new Color(16,144,144));

0

这对我有用。 希望能帮到你 这段代码将一个JPanel添加到当前的JFrame中,您可以在此面板上进一步构建GUI。您可以自定义JPanel上的RGB颜色,而不是JFrame。

import javax.swing.*;
import java.awt.*;

public class Main{

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        //Class class = new Class();
        frame.setSize(1920,1080);
        //frame.setTitle("XYZ");
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);
        panel.setBackground(new Color(51,153,255));
        //panel.add(class);
    }
}

请提供解释以便读者更好地理解您的回答,不要仅发布代码。 - Spoody

0
 if(evt.getSource() == jMenuItem11){
        getContentPane().setBackground(new Color(170, 8, 54));
    }
    if(evt.getSource() == jMenuItem12){
        getContentPane().setBackground(new Color(8, 54, 169));
    }
    if(evt.getSource() == jMenuItem13){
       getContentPane().setBackground(new Color(84, 8, 170));
    }

}


请勿发布仅包含代码的答案。您需要解释您的代码是如何工作/如何解决问题的。即使您认为这足以回答这个问题,该网站也要求保持一定的最低评论标准,并且有其原因。 - clearlight

0

http://www.tayloredmktg.com/rgb/

当你打开页面时,灰色似乎在页面顶部。 :) 同时确保你的JFrame是不透明的,否则你看不到你的颜色!

setOpaque(true);

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