Java JTabbedPane嵌入颜色

Java JTabbedPane嵌入颜色,java,swing,colors,jframe,jtabbedpane,Java,Swing,Colors,Jframe,Jtabbedpane,我想知道你是如何得到JTabbedPane插图的颜色的。我似乎不能染上这种颜色。我每次尝试都会得到236,这是外框的颜色,而内框的颜色大约深10,227227(使用内置的苹果颜色计) 我正在使用UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())设置外观 你可以在我在网上找到的一张图片中看到这一点。其中“面板标题”一词是指我得到的颜色较浅但对我没有用处的区域。里面的圆角是我试图获得的较深的颜色。我尝试获取内容窗格的

我想知道你是如何得到JTabbedPane插图的颜色的。我似乎不能染上这种颜色。我每次尝试都会得到236,这是外框的颜色,而内框的颜色大约深10,227227(使用内置的苹果颜色计)

我正在使用UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())设置外观

你可以在我在网上找到的一张图片中看到这一点。其中“面板标题”一词是指我得到的颜色较浅但对我没有用处的区域。里面的圆角是我试图获得的较深的颜色。我尝试获取内容窗格的颜色,但没有结果

谢谢你的帮助

**编辑:**添加代码!如您所见,我试图获得圆角内区域的颜色(如果您在mac上),而不是边框或显示“1”“2”的标签的颜色。我附上了一张照片,我正试图得到的部分,说“这里”的背景色谢谢

编辑:camickr,这里是UIManager默认设置的屏幕截图。不幸的是,中没有一种颜色与插图中的颜色相同


您可以覆盖
paintComponent()
以在选项卡的背景中使用
GradientPaint
,如下所示。几句话,

  • 让内容采用it内容的首选大小,如图所示

  • 在中构造GUI

  • 使用传统的Java名称

补充:元素并不总是在同一个点上,所以我不知道在什么地方可以得到颜色

听起来您想匹配
选项卡paneui
委托内部使用的颜色。一种办法如下:

  • 呈现组件的
    buffereImage
    ,如图所示

  • 确定
    top
    相对于
    c1
    顶部的坐标

    Point p = SwingUtilities.convertPoint(c1, 0, -1, top);
    
  • 使用
    getRGB()
    获取颜色,如图所示;用于验证结果


您可以使用查找颜色。

请将您的代码放在这里,这将非常好,我们将很容易为您提供建议:)添加代码!谢谢你的建议!颜色为半渐变色,范围从大约RGB/195195195到大约RGB/208 208 208 208。谢谢您的建议。在我的mac电脑上,当我运行该程序时,当我在屏幕截图上显示“Here”(在这里)的方框的圆角内时,根本没有渐变(使用mac数字颜色计)。问题是我无法静态定义这种颜色,因为在Windows上,这种颜色完全不同。我需要找到一种实用的方法来获得这种颜色,这样我可以在以后的程序中使用它。再次感谢!您好,垃圾神,谢谢您的回复,但我根本不想改变颜色,也不想加入任何渐变。我只是想得到颜色。啊,我看到你想匹配颜色,而不是改变它。我认为
com.apple.laf.AquaLookAndFeel
不会将这种颜色暴露为
UIManager
属性。您可以使用
机器人
,如图所示。感谢您的回复!我不确定如何在Robot中实现您引用的内容。你能帮我用它来获得颜色吗?运行程序并将鼠标移到感兴趣的区域上以查看颜色;我的代码是
0xFFDFDFDF
。我知道颜色代码是什么,问题是每次程序启动时,我都必须在每台计算机上获取此代码。所以每次启动程序时,我都需要有容器背景的颜色。在Mac上,这是灰色的。窗户上几乎是白色的。问题不是一次得到它,而是每次程序启动时得到它。我想做一些类似于jtabpane.getBackground()的事情,但这并没有得到容器的颜色,只是标签的颜色。我需要找到一种方法来获取容器的颜色。再次感谢,希望这一点现在更清楚谢谢你camickr,我编辑了这篇文章,提供了更多关于你回复的信息。
Point p = SwingUtilities.convertPoint(c1, 0, -1, top);
import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

/** @see https://stackoverflow.com/a/16625260/230513 */
public class Main {

    JFrame frame;
    Container c1 = new GradientPanel();
    Container c2 = new GradientPanel();
    JTabbedPane top = new JTabbedPane();

    private static class GradientPanel extends JPanel {

        public GradientPanel() {
            this.add(new JLabel("Here"));
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g;
            GradientPaint p = new GradientPaint(0, 0, Color.white,
                getWidth(), getHeight(), Color.gray);
            g2d.setPaint(p);
            g2d.fillRect(0, 0, getWidth(), getHeight());
        }
    }

    public void createGUI() {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        top = new JTabbedPane(JTabbedPane.TOP);
        top.addTab("1", c1);
        top.addTab("2", c2);
        frame.add(top);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Main().createGUI();
            }
        });
    }
}