2012-01-06 4 views
6

나는 당신이 modify the LaF properties 일 수 있다는 것을 알고있다. 그러나 이것을 어떻게하지 않고 어떻게 수행 할 것인가? 나는 단지 setBackground이 그것을하지 않기 때문에 묻는다. 나는 다음과 같은 속성을 변경하려면 찾고 있어요JTabbedPane의 배경색을 변경하는 방법은 무엇입니까?

참고 : (? 또는 TabbedPane.contentAreaColor)

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