JTable в JScrollPane, как установить фон?

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

вот 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

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

2 ответов


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

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

звоните:

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

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

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