2010-03-15 156 views
3

我使用的是Nimbus外觀。我需要更改JTabbedPane中選項卡的背景顏色和前景顏色,但顏色不會在JTabbedPane中設置。我試圖setForeground(),setForegroundAt()的setBackground()和setBackgroundAt()方法,但它不是works.This是我的代碼設置JTabbedPane的背景顏色


public class TabbedPaneDemo extends JFrame 
{ 
    TabbedPaneDemo() 
    { 
     try 
     { 
      UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 
     } 
     catch(Exception ex) {}

setLayout(new BorderLayout()); setBounds(100, 100, 800, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTabbedPane jt = new JTabbedPane(); jt.addTab("Tab1", new JPanel()); jt.addTab("Tab2", new JPanel()); jt.addTab("Tab3", new JPanel()); jt.addTab("Tab4", new JPanel()); for(int i = 0; i < jt.getComponentCount(); i++) { jt.setForegroundAt(i, Color.RED); jt.setBackgroundAt(i, Color.BLACK); } add(jt); setVisible(true); } public static void main(String args[]) { new TabbedPaneDemo(); }

}

回答

8

您可以做幾件不同的事情,具體取決於您想要的準確顏色的控制程度。最簡單的方法是更改​​UIManager中的某些屬性,以更改Nimbus從其中獲取其他顏色的顏色。我打得四處一點與您的代碼,並發現,如果我把下面的代碼中調用UIManager.setLookAndFeel()後,它會接近你在你的例子試圖紅色的黑色的外觀:

 UIManager.put("nimbusBase", new ColorUIResource(0, 0, 0)); 
    UIManager.put("textForeground", new ColorUIResource(255, 0, 0)); 

我會讓你試驗。欲瞭解更多信息,請閱讀關於配置Nimbus here的好文章。一定要看看他的標題爲「Nimbus UIDefaults Properties List」的鏈接。除了將顏色按摩到與您想要的類似的東西之外,您必須開始做一些混亂的事情,比如實施自定義繪畫的Painter類。

2

JTabbedPane的工作,當你將組件添加到它,例如添加5個JPanels,它們將被標記。

+0

我已將面板添加到JTabbedPane。這是我的代碼 JTabbedPane jt = new JTabbedPane(); jt.addTab(「Tab1」,new JPanel()); jt.addTab(「Tab2」,new JPanel()); jt.addTab(「Tab3」,new JPanel()); jt.addTab(「Tab4」,new JPanel()); jt.setForeground(Color.RED); jt.setBackground(Color.BLACK); jf.add(jt); //將JTabbedPane添加到JFrame – Ram 2010-03-15 07:22:17

1

如果要更改實際內容,則選項卡式窗格有兩種有用的方法:setForegroundAtsetBackgroundAt。您可以通過所有的標籤,只是循環調用這些:

for (int i = 0; i < pane.getTabCount(); i++) { 
    pane.setForegroundAt(i, foregroundColor); 
    pane.setBackgroundAt(i, backgroundColor); 
} 

您還可以使用getComponentAt,類似地:

for (int i = 0; i < pane.getTabCount(); i++) { 
    pane.getComponentAt(i).setForeground(foregroundColor); 
    pane.getComponentAt(i).setBackground(backgroundColor); 
} 

後一種方法更靈活 - 您可以稍後做更復雜所有組件使用這樣的代碼。

3

我討厭將它分解給你,但你將很難得到改變前景和背景的顏色。與許多基本組件(JTextField,JLabel等)不同,JTabbedPane在設置繪畫時會忽略前景和背景顏色。相反,它允許UI委託(由當前的外觀和感覺決定)來選擇顏色。

一些外觀和感覺允許顏色主題(想到Substance),但Nimbus似乎將這些顏色值硬編碼到繪畫代表中。

很可能你需要基於Nimbus的實現你自己的UI委託。有關更多信息,請參閱here這將是一個主要的痛苦,所以問問自己多少你想要這些顏色改變。

最後,如果有人告訴你簡單地繼承JTabbedPane的子類並在你自己的「paintComponent」方法中設置顏色,那就忽略它。然後,您將負責繪製整個組件,並且將失去任何類似Nimbus的視覺屬性。

+0

我第二個Jason - 我花了好幾天的時間試圖讓Nimbus中的JTabbedPane顯示Tabs更深一點(因爲當您指定燈光基色時,它們幾乎變白)。非常令人沮喪的是,你需要在Nimbus內部獲得學位...... – Philippp 2011-09-21 03:33:21

2

對不起,我的英語。

我試着解決這個問題2天..有「解決」解決方案。

需要設置選項卡組件。然後爲此組件設置顏色。

/* 
    ... 
    Setting LAF Nimbus 
    ... 
*/ 

JTabbedPane tp = new JTabbedPane(); 

/* 
    ... 
    add tabs in TabbedPane 
    ... 
*/ 

然後指定標籤需要做的:

 JLabel title = new JLabel(tp.getTitleAt(tabIndex)); 
     title.setForeground(Color.RED); 
     tp.setTabComponentAt(tabIndex, title); 

OMG!是工作!

+0

+1不錯的一個 - 但請注意,它不適用於背景顏色。 – DNA 2012-03-27 11:06:51

1

其實不是真正的

new JTabbedPane().setUI(new YourUI()); 

,然後您創建簡單的UI

public class YourUI extends BasicTabbedPaneUI{ 

..... 

private class ScrollableTabPanel extends JPanel implements UIResource { 
public ScrollableTabPanel() { 
    setLayout(null); 
} 

public void paintComponent(Graphics g) { 

super.paintComponent(g); 

g.setColor(Color.red); 
g.fillRect(tabPane.getBounds());    

     } 
    } 

.... 

} 

月Cajthaml

有是應該的樣子(不介意QuadSpline標籤並關閉酒吧這是我的UI實現的另一個附加組件),我在這裏的聲望是沒有的,所以有一個鏈接到圖像

http://a5.sphotos.ak.fbcdn.net/hphotos-ak-ash3/166028_2974620064454_896181702_n.jpg