2013-08-21 16 views
9

Używam JScrollPane do zawijania JTable. W zależności od konfiguracji istnieje miejsce, które nie jest zajmowane przez tabelę. Jest narysowany na szaro (wygląda na przezroczysty i widać po prostu komponent z tyłu). Jak ustawić ten obszar na określony kolor?JTable w JScrollPane, jak ustawić tło?

Oto SSCCE do zilustrowania.

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

Tutaj można zobaczyć obszar, który chcę "pokolorować". W SSCCE staram się to zrobić, używając do tego tabeli i panelu przewijania, bez powodzenia.

enter image description here

Czy możesz mi powiedzieć, co robię źle?

Odpowiedz

22

Zamiast tego:

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

wezwanie:

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

JScrollPane nie może być nieprzezroczyste – mKorbel

+0

@mKorbel Interesty. ... Dlaczego więc ta metoda istnieje? –

+0

[patrz tutaj] (http://stackoverflow.com/a/18275877/714968) dla JTable, to ciekawe pytanie zadano jej kilka razy, nie wiem odpowiedź – mKorbel

0

Nie używaj nieprzezroczyste, spróbuj tego:

pane.getViewport().setBackground(Color.WHITE); 
Powiązane problemy