2013-05-18 30 views
3

我想知道如何獲得JTabbedPane的插入顏色。我似乎無法得到這種顏色。我做的每一個嘗試我得到236,236,236這是外框顏色,其中內框顏色約10深,227,227,227(使用內置的蘋果顏色計)。Java JTabbedPane插入顏色

我使用UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())設置外觀和感覺;

你可以在我在互聯網上找到的圖像中看到這個。 http://pagesofinterest.net/wordpress/wp-content/uploads/2009/06/Quaqua-Maven-Netbeans.jpg如果「面板的標題」這個單詞是我所獲得的對我來說沒有用的淺色的區域。圓角內是我想要獲得的較暗的顏色。我試圖獲取內容窗格的顏色無濟於事。

感謝您的幫助!

**編輯:**添加的代碼!正如你看到的,我試圖讓圓角內的區域的顏色(如果你在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的默認的截圖。不幸的是,沒有任何顏色是插圖的正確顏色。

UI Manager Defaults

+1

你可以請你把你的代碼放在這裏,這將是偉大的,它會很容易給我們建議:) – CRazyProgrammer

+0

添加代碼!感謝您的建議! – dannyn382

+0

顏色是半漸變,範圍從約RGB/195,195,195到約RGB/208,208,208 – MadProgrammer

回答

1

您可以覆蓋paintComponent()在標籤的背景使用GradientPaint,如下圖所示。幾點注意事項,

  • 讓內容採用的是內容的首選大小,如圖所示here

  • event dispatch thread中構建GUI。

  • 使用傳統的Java名稱。

附錄:的元素並不總是在同一個地方,所以我不知道是什麼地方得到的顏色

聽起來好像你想匹配TabbedPaneUI代表內部使用的顏色。一種方法是如下:

  • 渲染分量的BufferedImage,如圖here

  • 確定相對於c1頂部的Pointtop的座標。

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

你好Trashgod,謝謝你的迴應,但我不想改變顏色,或者放入任何漸變。我只想獲得顏色。 – dannyn382

+0

啊,我看到你想匹配的顏色,而不是改變它。我不認爲'com.apple.laf.AquaLookAndFeel'將這種顏色公開爲'UIManager'屬性。您可以使用'Robot',顯示在[這裏](http://stackoverflow.com/a/3742841/230513)。 – trashgod

+0

感謝您的回覆!我不確定如何實現你在Robot中引用的內容。你能幫我使用它來獲得顏色嗎? – dannyn382