2012-01-06 9 views
6

私はあなたがmodify the LaF propertiesになることができると知っていますが、そうすることなくどのようにこれを達成しますか? setBackgroundはやっていないようですので頼むだけです。 (?またはTabbedPane.contentAreaColor):私は、次のプロパティを変更しているよJTabbedPaneの背景色を変更するにはどうすればいいですか?

  1. TabbedPane.backgroundを例としてTabComponentsDemoを使用して
  2. TabbedPane.tabAreaBackground
+0

あなたは、タブの色を意味していますそれ自身 – trashgod

+1

私はタブのヘッダーを意味します。タイトルが行く場所)とコンテンツエリア。 – mre

+0

setContentAreaBackground()メソッドが表示されないので、これを行うためにカスタムUIを作成する必要があるようです。 – camickr

答えて

16

は、setBackgroundAt()が動作しているようです:

private void initTabComponent(int i) { 
    pane.setTabComponentAt(i, new ButtonTabComponent(pane)); 
    pane.setBackgroundAt(i, Color.getHSBColor((float)i/tabNumber, 1, 1)); 
} 

補足:@camickrが有益に観察されるので、ターゲットコンポーネントはopaqueでなければなりません。

TabColors

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTabbedPane; 

/** @see http://stackoverflow.com/questions/8752037 */ 
public class TabColors extends JPanel { 

    private static final int MAX = 5; 
    private final JTabbedPane pane = new JTabbedPane(); 

    public TabColors() { 
     for (int i = 0; i < MAX; i++) { 
      Color color = Color.getHSBColor((float) i/MAX, 1, 1); 
      pane.add("Tab " + String.valueOf(i), new TabContent(i, color)); 
      pane.setBackgroundAt(i, color); 
     } 
     this.add(pane); 
    } 

    private static class TabContent extends JPanel { 

     private TabContent(int i, Color color) { 
      setOpaque(true); 
      setBackground(color); 
      add(new JLabel("Tab content " + String.valueOf(i))); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(320, 240); 
     } 
    } 

    private void display() { 
     JFrame f = new JFrame("TabColors"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(this); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TabColors().display(); 
      } 
     }); 
    } 
} 
+0

しかし、これはコンテンツの領域ではなく、タブのヘッダの色のみを設定します...そうですか? – mre

+2

以前に@camickrがコメントしたように、ターゲットコンポーネントは[不透明]でなければなりません(http://java.sun.com/products/jfc/tsc/articles/painting/index.html#props)。 – trashgod

+0

不透明度が再び私を得たようです! :[ – mre

0

また、次の操作を行うことができます。

for (int i = 0; i < this.getTabCount(); i++) { 
    this.getComponentAt(i).setBackground(Color.DARK_GRAY); 
} 

または

タブとパネルの背景用
for (int i = 0; i < this.getTabCount(); i++) { 
      this.setBackgroundAt(i, Color.DARK_GRAY); 
      this.getComponentAt(i).setBackground(Color.DARK_GRAY); 
} 

関連する問題