【问题标题】:Java JTabbedPane Inset ColorJava JTabbedPane 插入颜色
【发布时间】:2013-05-13 10:05:56
【问题描述】:

我想知道如何获得 JTabbedPane 插图的颜色。我似乎无法获得这种颜色。每次尝试我都会得到 236,236,236,这是外框颜色,内框颜色大约暗 10,227,227,227(使用内置的苹果色度计)。

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

您可以在我在互联网上找到的图片中看到这一点。 http://pagesofinterest.net/wordpress/wp-content/uploads/2009/06/Quaqua-Maven-Netbeans.jpg“小组标题”字样是我得到较浅颜色的区域,对我没有用处。在圆角内是我想要获得的较深的颜色。我尝试让内容窗格的颜色无济于事。

感谢您的帮助!

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

import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
import javax.swing.UIManager;

public class main {
JFrame frame;
Container c1 = new Container();
Container c2 = new Container();
JTabbedPane top = new JTabbedPane();
static main GUI;
public void createGUI(){
    frame = new JFrame();
    Container c = frame.getContentPane();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    top = new JTabbedPane(JTabbedPane.TOP);
    top.setFocusTraversalKeysEnabled(false);
    top.setFocusable(false);
    top.addTab("1", c1);
    top.addTab("2", c2);
    frame.setSize(315,450);
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setResizable(true);
    c.add(top);
    frame.pack();
    frame.setVisible(true);
} 
public static void main(String[] args) {
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch(Exception e) {}
    GUI = new main();
    GUI.createGUI();
}
}

编辑: camickr,这是 UIManager 默认值的屏幕截图。不幸的是,没有一个颜色是正确的插图颜色。

【问题讨论】:

  • 你能把你的代码放在这里吗,那太好了,我们很容易给你建议:)
  • 添加代码!感谢您的建议!
  • 颜色为半渐变色,范围从大约RGB/195、195、195到大约RGB/208、208、208
  • 感谢您的建议。在我的mac上,当我运行程序时,当我在屏幕截图中带有“Here”的盒子的圆角内(使用mac数字色度计)时,根本没有渐变。问题是我不能静态定义这种颜色,因为在 Windows 上,这种颜色完全不同。我需要找到一种实用的方法来获得这种颜色,以便以后可以在我的程序中使用它。再次感谢!

标签: java swing colors jframe jtabbedpane


【解决方案1】:

您可以覆盖paintComponent() 以在标签的背景中使用GradientPaint,如下所示。一些注意事项,

  • 让内容采用自己喜欢的大小,如图here

  • event dispatch thread 中构建GUI。

  • 使用传统的 Java 名称。

附录:元素并不总是在同一个位置,所以我不知道从哪里得到颜色

听起来您想匹配TabbedPaneUI 委托内部使用的颜色。一种方法如下:

  • 渲染一个组件的BufferedImage,如图here

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

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

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();
            }
        });
    }
}

【讨论】:

  • 你好垃圾神,谢谢你的回复,但我根本不想改变颜色,或者放入任何渐变。我只是想得到颜色。
  • 啊,我看到你想匹配颜色,而不是改变它。我不认为com.apple.laf.AquaLookAndFeel 将该颜色公开为UIManager 属性。您可以使用Robot,显示为here
  • 感谢您的回复!我不确定如何实现您在 Robot 中引用的内容。你能帮我用它来获得颜色吗?
  • 运行程序并将鼠标悬停在感兴趣的区域上以查看颜色;我说0xFFDFDFDF
  • 我知道颜色代码是什么,问题是每次程序启动时我都必须在每台计算机上获取它。所以每次我启动程序时,我都需要有容器背景的颜色。在 Mac 上,这是一种灰色。在 Windows 上,它几乎是白色的。问题不是一次得到它,而是每次程序启动时都得到它。我想做类似 jtabpane.getBackground() 之类的事情,但这并没有得到容器的颜色,而只是标签的颜色。我需要找到一种方法来获取容器的颜色。再次感谢,希望现在更清楚了
【解决方案2】:

您也许可以使用UIMangaer Defaults 来查找颜色。

【讨论】:

  • 谢谢 camickr,我已编辑 OP 以提供与您的回复有关的更多信息。
猜你喜欢
  • 2017-05-24
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 2012-02-03
  • 2014-10-19
  • 2013-12-31
  • 2014-06-19
  • 1970-01-01
相关资源
最近更新 更多