JTable in JScrollPane, how to set background?
Asked Answered
S

2

18

I am using a JScrollPane to wrap a JTable. Depending on the configuration, there is some space that is not occupied by the table. It is drawn gray (it looks like it is transparent and you can just see the component in the back). How can I set this area to be a certain color?

Here is a SSCCE to illustrate.

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

And here you can see the area, which I want to "colorize". In the SSCCE, I try to do that by using setOpaque(boolean) and setBackgroundColor(Color) of the table and scroll pane, with no success.

enter image description here

Can you tell me, what I am doing wrong?

Sperry answered 21/8, 2013 at 15:52 Comment(0)
C
35

Instead of this:

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

call:

pane.getViewport().setBackground(Color.WHITE);
Carrageen answered 21/8, 2013 at 16:0 Comment(10)
JScrollPane can't be opaquePharyngitis
@Pharyngitis Interesty...Then why does that method even exists?Carrageen
see here for JTable, this insteresting question were asked her a few times, I don't know answerPharyngitis
Works perfectly. Thanks a lot for the answer. @Pharyngitis Yeah, I figured that those setOpaque() methods did not do anything. Which was additionally confusing. ;)Sperry
@Pharyngitis .. huch? Every component can be opaque (or not)Argile
@Argile as far as i understan from OPs picture and description ---> Depending on the configuration, there is some space that is not occupied by the table. It is drawn gray (it looks like it is transparent and you can just see the component in the back). How can I set this area to be a certain color?, or am I wrongPharyngitis
@Argile and then there could be another logical requirement and nice issue with to set opacity for JTableHeader too and propertlyPharyngitis
@Pharyngitis the only error of the OP was to color the wrong component (scrollPane vs. viewport), opacity has nothing to do with it: both are opaque by default. And the header is ... elsewhere ;-)Argile
@Argile aaach now I see where your comment goes, sure you can to convert that to the answer, code be reference, important point for another readers herePharyngitis
@Pharyngitis no need for yet another answer, brano's already did it :-)Argile
B
-1
pane.getViewport().getView().setBackground(Color.RED)

Not pane.getViewport().setBackground(Color.RED)

Burkhalter answered 30/6 at 15:46 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.