remove cells border in a jtable
Asked Answered
S

2

22

I have my on custom cell renderer and want to remove the border of the cell.
How can i do it? I tried setBorder but it doesn't work.

Here is my renderer code:

public class MyTableCellRenderer extends DefaultTableCellRenderer {

    private static final long serialVersionUID = -1195682136616306875L;

    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        Component c = super.getTableCellRendererComponent(table, value,
                isSelected, hasFocus, row, column);
        if (!isSelected) {
            if (row % 2 == 0 && row != 1) {
                c.setBackground(new Color(255, 255, 150));
            } else {
                c.setBackground(Color.WHITE);
            }
        } else {
            c.setBackground(new Color(255, 230, 255));
        }
        c.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
        return c;
    }
}
Sporozoite answered 2/7, 2010 at 15:34 Comment(0)
D
54

The lines drawn between cells are not part of the cells themselves. They are drawn by the table. You can turn them off for the entire table with:

table.setShowGrid(false);

To disable just the the horizontal or just the vertical lines:

table.setShowHorizontalLines(false);
table.setShowVerticalLines(false);

Or, you can change the color of the lines with:

table.setGridColor(color)
Dynamometer answered 2/7, 2010 at 19:37 Comment(4)
You can do both at the same time with the setShowGrid() as wellLoveliesbleeding
@WimDeblauwe Thanks, I missed that oneDynamometer
@Dynamometer What if I want to remove border around 1 cell only??Lythraceous
@Nikhil The javax.swing.plaf.basic.BasicTableUI which handles the rendering of the grid implements it as a private method, so there's no trivial way to override it. I have not tried these , but some possibilities to look at: code.google.com/p/spantable java2s.com/Code/Java/Swing-Components/…Dynamometer
D
3

I don't know how your code compiles since only Swing components can have a Border and the Component class doesn't have a setBorder() method.

When I override the default renderer I use something like:

Class CustomRenderer extends DefaultTableCellRenderer
{
    public Component getTableCellRendererComponent(
        JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        this.setBorder (BorderFactory.createBevelBorder (EtchedBorder.RAISED));
        return this;
    }
}
Derte answered 2/7, 2010 at 15:53 Comment(2)
I am able to set all type of Borders except the emptyBorder.Sporozoite
And what do you expect to see when you use an EmptyBorder? How do you know its not working. It works fine for me, the text is up against the left edge instead of being indented by 1 pixel because of the default Border.Derte

© 2022 - 2024 — McMap. All rights reserved.