2012-01-06 110 views
6

Sé que puede modify the LaF properties, pero ¿cómo lograr esto sin hacer eso? Solo pregunto porque setBackground parece no hacerlo.¿Cómo cambiar el color de fondo de JTabbedPane?

Tenga en cuenta que estoy mirando para cambiar las siguientes propiedades: (? O TabbedPane.contentAreaColor)

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

¿Es que quería decir el color de la pestaña en sí – trashgod

+1

Me refiero al encabezado de la pestaña (es decir donde va el título) y el área de contenido. – mre

+0

No veo un método setContentAreaBackground() por lo que parece que tendrá que crear una interfaz de usuario personalizada para hacer esto. – camickr

Respuesta

16

Usando TabComponentsDemo como ejemplo, setBackgroundAt() parece funcionar:

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

Addendum: Como se ha observado útilmente en @camickr, el componente de destino debe ser 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

Pero eso solo establece el color del encabezado de la pestaña, no el área de contenido ... ¿verdad? – mre

+2

Derecha. Como @camickr comentó anteriormente, el componente de destino debe ser [opaque] (http://java.sun.com/products/jfc/tsc/articles/painting/index.html#props). – trashgod

+0

parece que la opacidad me tiene de nuevo! : [ – mre

0

También puede hacer lo siguiente:

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

o

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

para la lengüeta y el panel fondos

Cuestiones relacionadas