Java JTabbedPane插图颜色

时间:2013-05-18 09:16:40

标签: java swing colors jframe jtabbedpane

我想知道如何获得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”的标签。我附上了一张照片,我试图获得“Here”谢谢的部分的背景颜色!

Screenshot

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 Defaults的屏幕截图。不幸的是,插入物中没有任何颜色是正确的颜色。

UI Manager Defaults

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可以覆盖paintComponent()以在标签背景中使用GradientPaint,如下所示。几点说明,

  • 让内容采用其内容的首选大小,如here所示。

  • event dispatch thread

  • 中构建GUI
  • 使用传统的Java名称。

附录:元素并不总是在同一个地方,所以我不知道获取颜色的地方

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

  • 渲染BufferedImage组件,如图here所示。

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

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

Main image

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