2013-08-21 16 views
9

Sto utilizzando un JScrollPane per avvolgere un JTable. A seconda della configurazione, c'è un po 'di spazio che non è occupato dalla tabella. È disegnato in grigio (sembra che sia trasparente e puoi vedere solo il componente nella parte posteriore). Come posso impostare quest'area come un determinato colore?JTabella in JScrollPane, come impostare lo sfondo?

Ecco un SSCCE per illustrare.

import java.awt.Color; 
import java.util.Vector; 

import javax.swing.JDialog; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 

public class DialogDemo extends JDialog { 
    public static void main(final String[] args) { 
     final DialogDemo diag = new DialogDemo(); 
     diag.setVisible(true); 
    } 

    public DialogDemo() { 
     super(); 
     setTitle("SSCCE"); 

     final Vector<Vector<String>> rowData = new Vector<Vector<String>>(); 
     final Vector<String> columnNames = new VectorBuilder<String>().addCont("Property").addCont("Value"); 
     rowData.addElement(new VectorBuilder<String>().addCont("lorem").addCont("ipsum")); 
     rowData.addElement(new VectorBuilder<String>().addCont("dolor").addCont("sit amet")); 
     rowData.addElement(new VectorBuilder<String>().addCont("consectetur").addCont("adipiscing elit.")); 
     rowData.addElement(new VectorBuilder<String>().addCont("Praesent").addCont("posuere...")); 

     final JTable table = new JTable(rowData, columnNames); 
     JScrollPane pane = new JScrollPane(table); 

     // ************* make that stuff white! ******************* 
     table.setBackground(Color.white); 
     table.setOpaque(true); 
     pane.setBackground(Color.white); 
     pane.setOpaque(true); 
     // ************* make that stuff white! ******************* 

     add(pane); 
     pack(); 

     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
    } 

    class VectorBuilder<T> extends Vector<T> { 
     public VectorBuilder<T> addCont(final T elem) { 
      addElement(elem); 
      return this; 
     } 
    } 
} 

E qui puoi vedere l'area, che voglio "colorare". In SSCCE, provo a farlo usando setOpaque(boolean) e setBackgroundColor(Color) della tabella e del pannello di scorrimento, senza successo.

enter image description here

Potete dirmi, che cosa sto facendo male?

risposta

22

Invece di questo:

table.setBackground(Color.white); 
table.setOpaque(true); 
pane.setBackground(Color.white); 
pane.setOpaque(true); 

chiamata:

pane.getViewport().setBackground(Color.WHITE); 
+1

JScrollPane non può essere opaco – mKorbel

+0

@mKorbel Interesty. .. Allora perché esiste anche quel metodo? –

+0

[vedi qui] (http://stackoverflow.com/a/18275877/714968) per JTable, questa domanda interessante è stata chiesta a lei alcune volte, non so risposta – mKorbel

0

Non usare opaco, provate questo:

pane.getViewport().setBackground(Color.WHITE);