2012-01-06 85 views
6

Tôi biết bạn có thể modify the LaF properties, nhưng làm cách nào để bạn thực hiện việc này mà không làm như vậy? Tôi chỉ hỏi vì setBackground dường như không làm điều đó.Làm thế nào để thay đổi màu nền của JTabbedPane?

Lưu ý rằng tôi đang tìm cách để thay đổi các thuộc tính sau: (? Hoặc TabbedPane.contentAreaColor)

  1. TabbedPane.background
  2. TabbedPane.tabAreaBackground
+0

Bạn có nghĩa là màu sắc của các tab chính nó – trashgod

+1

Tôi có nghĩa là tiêu đề tab (tức là nơi tiêu đề đi) và khu vực nội dung. – mre

+0

Tôi không thấy phương thức setContentAreaBackground() để có vẻ như bạn sẽ cần phải tạo một giao diện người dùng tùy chỉnh để thực hiện việc này. – camickr

Trả lời

16

Sử dụng TabComponentsDemo làm ví dụ, setBackgroundAt() dường như làm việc:

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

Phụ lục: Như @camickr đã quan sát cẩn thận, thành phần đích phải là 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

Nhưng điều đó chỉ đặt màu tiêu đề tab, không phải là vùng nội dung ... phải không? – mre

+2

Phải. Như @camickr trước đó đã nhận xét, thành phần đích phải là [opaque] (http://java.sun.com/products/jfc/tsc/articles/painting/index.html#props). – trashgod

+0

có vẻ như độ mờ đục đã cho tôi một lần nữa! : [ – mre

0

Bạn cũng có thể làm như sau:

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

hoặc

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

cho tab và bảng nền