4

我想知道如何获得 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 “Panel's Title”字样是我得到较浅颜色的区域,对我没有用处. 在圆角内是我想要获得的较深的颜色。我尝试获取内容窗格的颜色无济于事。

感谢你的帮助!

**编辑:**添加代码!如您所见,我试图获取圆角内区域的颜色(如果您在 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 默认值的屏幕截图。不幸的是,没有一个颜色是正确的插图颜色。

UI 管理器默认值

4

2 回答 2

2

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

于 2013-05-18T15:25:30.667 回答
1

您可以覆盖paintComponent()GradientPaint在选项卡的背景中使用 a,如下所示。一些笔记,

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

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

  • 渲染组件的 a ,BufferedImage如下所示

  • 确定 aPointtop对于 顶部的坐标c1

    Point p = SwingUtilities.convertPoint(c1, 0, -1, top);
    
  • 使用 获取颜色getRGB(),如下所示;用于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();
            }
        });
    }
}
于 2013-05-18T14:17:04.767 回答