1

Example:

https://i.sstatic.net/xKQGq.png

I have problem with table header. How can i remove this white border or change color of it? My code:

JTableHeader header = table.getTableHeader();
    header.setBackground(new Color(21, 25, 28));
    header.setForeground(new Color(255, 117, 0));
    header.setPreferredSize(new Dimension(10,30));
    header.setBorder(new LineBorder(new Color(21,25,28),2));

1 Answer 1

0

Well you were almost there...

For the header you can do:

final DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setBorder(null);
header.setDefaultRenderer(renderer);

If you also want to remove the borders from the data cells also (practically removing the grid), then call:

table.setShowGrid(false);

Here is an assembled example of a JTable without any borders (except when the user selects a cell, then a border will appear around it temporarily):

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;

public class Main {
    
    private static void createAndShowGUI() {
        final JFrame frame = new JFrame("Table without borders");
    
        final JTable table = new JTable(new Object[][]{
            new Object[]{"user", "user", "user"},
            new Object[]{"user", "user", "user"},
            new Object[]{"user", "user", "user"},
            new Object[]{"user", "user", "user"},
            new Object[]{"user", "user", "user"},
            new Object[]{"user", "user", "user"}
        }, new Object[]{"A", "B", "C"});
        
        JTableHeader header = table.getTableHeader();
        
        final Color dark = new Color(21, 25, 28),
                    orange = new Color(255, 117, 0);
        table.setForeground(orange);
        table.setBackground(dark);
        header.setBackground(dark);
        header.setForeground(orange);
        
        final DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
        renderer.setBorder(null); //Remove border from the renderer (which is just a JLabel)...

        //Apply the renderer to all header cells and all data cells:
        header.setDefaultRenderer(renderer);
        table.setDefaultRenderer(Object.class, renderer);
        
        /*The follwing lines simply remove the border from the cell editor
        (ie the component which draws each cell when the user edits its value):*/
        //final JTextField editor = new JTextField();
        //editor.setBorder(null);
        //table.setCellEditor(new DefaultCellEditor(editor));
        
        //header.setBorder(null); //Not needed.
        
        table.setShowGrid(false); //Hide the grid (which is some extra border between cells).
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new JScrollPane(table));
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
    
    public static void main(final String[] args) {
        SwingUtilities.invokeLater(Main::createAndShowGUI);
    }
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.