Using an empty column as a divider in a JTable.
        Posted  
        
            by Catalina Island
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Catalina Island
        
        
        
        Published on 2010-04-10T18:33:32Z
        Indexed on 
            2010/04/10
            18:53 UTC
        
        
        Read the original article
        Hit count: 242
        
I'm trying to use an empty column as a divider between pairs of columns in a JTable. Here's a picture and code for what I have so far. I know I can change the look using a custom TableCellRenderer. Before I go down that road, is there a better way to do this? Any ideas appreciated.

import javax.swing.*;
import javax.swing.table.*;
public class TablePanel extends JPanel {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame("TablePanel");
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.add(new TablePanel());
                f.pack();
                f.setVisible(true);
            }
        });
    }
    public TablePanel() {
        TableModel dataModel = new MyModel();
        JTable table = new JTable(dataModel);
        table.getColumnModel().getColumn(MyModel.DIVIDER).setMaxWidth(0);
        JScrollPane jsp = new JScrollPane(table);
        jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        this.add(jsp);
    }
    private static class MyModel extends AbstractTableModel {
        private static final int DIVIDER = 2;
        private final String[] names = { "A1", "A2", "", "B1", "B2" };
        @Override
        public int getRowCount() {
            return 32;
        }
        @Override
        public int getColumnCount() {
            return names.length;
        }
        @Override
        public String getColumnName(int col) {
            if (col == DIVIDER) return "";
            return names[col];
        }
        @Override
        public Object getValueAt(int row, int col) {
            if (col == DIVIDER) return "";
            return (row + 1) / 10.0;
        }
        @Override
        public Class<?> getColumnClass(int col) {
            if (col == DIVIDER) return String.class;
            return Number.class;
        }
    }
}
© Stack Overflow or respective owner