| Duplicate :   | |
| Duplicate :   | |
| Relates :   | |
| Relates :   | 
This is an umbrella CR for two problems with JTableHeader
1) JTableHeader reacts to the mouse when disabled
public class TableHeaderDisabled {
    private JComponent createContent() {
        JTable table = new JTable(20, 5);
        table.setAutoCreateRowSorter(true);
        table.setEnabled(false);
        table.getTableHeader().setEnabled(false);
        JComponent content = new JScrollPane(table);
        return content;
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame("");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TableHeaderDisabled().createContent());
                frame.setLocationRelativeTo(null);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
} 
2) JTableHeader doesn't allow to drag a column to a new place when it is not attached to a JTable, try to drag a column to a new place with the following test case:
(not that the dragged column returns to its initial place!)
import javax.swing.*;
import javax.swing.table.JTableHeader;
public class TableHeaderStandAlone {
    private static void createGui() {
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // just to quickly grab a column model
        JTable table = new JTable(10, 5);
        JTableHeader header = new JTableHeader(table.getColumnModel());
        frame.add(header);
        
        frame.setSize(200, 200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
    public static void main(String[] args) throws Exception {
        SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                TableHeaderStandAlone.createGui();
            }
        });
    }
}
| 
 |