2012-01-06 14 views
6

Biliyorum, modify the LaF properties, ancak bunu böyle yapmadan nasıl başarabilirsiniz? Sadece soruyorum çünkü setBackground yapmıyor gibi görünüyor. Ben aşağıdaki özellikleri değiştirmek için arıyorumJTabbedPane'in arka plan rengi nasıl değiştirilir?

Not: (? Ya TabbedPane.contentAreaColor)

  1. TabbedPane.background örnek olarak TabComponentsDemo Kullanılması
  2. TabbedPane.tabAreaBackground
+0

sekme rengini anlamına mı kendisi – trashgod

+1

Sekme başlığını kastediyorum (ör. başlık nereye giderse) ve içerik alanı. – mre

+0

SetContentAreaBackground() yöntemini göremiyorum, bu nedenle bunu yapmak için özel bir kullanıcı arayüzü oluşturmanız gerekecek gibi görünüyor. – camickr

cevap

16

, setBackgroundAt() iş gibi görünüyor:

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

Ek: As @ camickr'in yararlı bir şekilde gözlendiği, hedef bileşen opaque olmalıdır.

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

Ancak bu yalnızca içerik alanı değil sekme başlığı rengini ayarlar ... değil mi? – mre

+2

Sağ. @camickr'in daha önce yorumladığı gibi, hedef bileşen [opak] olmalıdır (http://java.sun.com/products/jfc/tsc/articles/painting/index.html#props). – trashgod

+0

, opaklığın beni tekrar yakaladığı görünüyor! : [ – mre

0

Ayrıca aşağıdakileri yapabilirsiniz:

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

veya

sekme ve panel arka planlar için
for (int i = 0; i < this.getTabCount(); i++) { 
      this.setBackgroundAt(i, Color.DARK_GRAY); 
      this.getComponentAt(i).setBackground(Color.DARK_GRAY); 
}