2013-08-21 4 views
9

Я использую JScrollPane для обертывания JTable. В зависимости от конфигурации есть пространство, которое не занято таблицей. Он окрашен в серый цвет (похоже, он прозрачен, и вы можете просто увидеть компонент в задней части). Как я могу задать для этой области определенный цвет?JTable в JScrollPane, как установить фон?

Здесь показан SSCCE.

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

И здесь вы можете увидеть область, которую я хочу «раскрасить». В SSCCE я пытаюсь сделать это, используя setOpaque(boolean) и setBackgroundColor(Color) таблицы и панель прокрутки, без каких-либо успехов.

enter image description here

Можете ли вы сказать мне, что я делаю не так?

ответ

22

Вместо этого:

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

вызов:

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

JScrollPane не может быть непрозрачным – mKorbel

+0

@mKorbel Interesty. Но почему этот метод существует? –

+0

[см. Здесь] (http://stackoverflow.com/a/18275877/714968) для JTable, этот вопрос, связанный с вопросом, был задан ей несколько раз, я не знаю ответа – mKorbel

0

Не используйте непрозрачный, попробуйте следующее:

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