Java 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”部分的背景颜色谢谢!

截图

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管理器默认值

您可以使用UIMangaer默认值来查找颜色。

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

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

  • 在事件派发线程中构造GUI。

  • 使用传统的Java名称。

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

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

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

  • 确定top相对于c1 top的坐标。

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

主要形象

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