【问题标题】:The same color shows up differently for JButton and JFrame. How do I fix this?对于 JButton 和 JFrame,相同的颜色显示不同。我该如何解决?
【发布时间】:2013-11-17 18:03:21
【问题描述】:

以下代码生成上面的图像。如您所见,相同颜色的粉红色在 JFrame 和 JButton 中的显示不同。我可以进行什么修复以使它们的颜色完全相同?

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.Border;
    import javax.swing.border.CompoundBorder;
    import javax.swing.border.EmptyBorder;
    import javax.swing.border.LineBorder;

    public class Testing extends JFrame {   
        public Testing() {
            super("hi");
            setBackground(Color.PINK);
            JPanel panel = new JPanel();

            JButton jb = new JButton();
            jb.setText("Here I am");
            Border line = new LineBorder(Color.PINK);
            Border margin = new EmptyBorder(5, 15, 5, 15);
            Border compound = new CompoundBorder(line, margin);
            jb.setOpaque(true);
            jb.setBorder(compound);
            jb.setBackground(Color.PINK);

            panel.add(jb);
            add(panel);
            setVisible(true);
        }

        public static void main(String[] args){
            Testing t = new Testing();  
        }
    }

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE
  • @AndrewThompson 是我自己还是显示器的角度影响了颜色的感知?
  • @LittleChild 我的显示器角度改变了每一种颜色。 OTOH 从任何角度看,这些颜色看起来都不一样。
  • 我认为我提供的示例代码是一个简短的、独立的、正确的示例?我错过了什么?
  • 运行时问题的 SSCCE 在复制/粘贴到源文件并编译时应该可以干净地编译。代码 sn-p(没有导入)将无法编译。因此,代码 sn-p 不能是 SSCCE。我在我的回答中发布了一个 SSCCE。

标签: java swing jframe transparency jbutton


【解决方案1】:

为您的面板设置背景色而不是框架。问题解决了。

public Testing() {
    super("hi");
    setBackground(Color.PINK);
    JPanel panel = new JPanel();

    JButton jb = new JButton();
    jb.setText("Here I am");
    Border line = new LineBorder(Color.PINK);
    Border margin = new EmptyBorder(5, 15, 5, 15);
    Border compound = new CompoundBorder(line, margin);
    jb.setOpaque(true);
    jb.setBorder(compound);
    jb.setBackground(Color.PINK);
    panel.setBackground(Color.PINK);
    panel.add(jb);
    add(panel);
    setVisible(true);
}

【讨论】:

    【解决方案2】:

    颜色相同,但代码设置错误的粉红色。可见。

    import java.awt.*;
    import javax.swing.*;
    import javax.swing.border.*;
    
    public class ColorTest extends JFrame {
    
        public ColorTest() {
            super("hi");
            //setBackground(Color.PINK);
            JPanel panel = new JPanel();
            panel.setBackground(Color.PINK);
    
            JButton jb = new JButton();
            jb.setText("Here I am");
            Border line = new LineBorder(Color.RED, 5);
            Border margin = new EmptyBorder(5, 15, 5, 15);
            Border compound = new CompoundBorder(line, margin);
            jb.setOpaque(true);
            jb.setBorder(compound);
            jb.setBackground(Color.PINK);
    
            panel.add(jb);
            add(panel);
            pack();
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            setVisible(true);
        }
    
        public static void main(String[] args) {
            ColorTest t = new ColorTest();
        }
    }
    

    还有

    1. 不要扩展框架,只使用一个实例。
    2. 应在 EDT 上启动和更新 Swing GUI。

    【讨论】:

      猜你喜欢
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 2014-09-09
      相关资源
      最近更新 更多