/** * Returns a reasonable minimal preferred height for the header. This is * meant as a last straw if all header values are null, renderers report 0 as * their preferred height.<p> * * This implementation returns the default header renderer's preferred height as measured * with a dummy value if the input height is 0, otherwise returns the height * unchanged. * * @param height the initial height. * @return a reasonable minimal preferred height. * * @see #getPreferredSize() * @see #getPreferredSize(Dimension) */ protected int getMinimumHeight(int height) { if ((height == 0)) { // && (getXTable() != null) // && getXTable().isColumnControlVisible()){ TableCellRenderer renderer = getDefaultRenderer(); Component comp = renderer.getTableCellRendererComponent(getTable(), "dummy", false, false, -1, -1); height = comp.getPreferredSize().height; } return height; }
/** * Returns a reasonable minimal preferred height for the header. This is * meant as a last straw if all header values are null, renderers report 0 as * their preferred height.<p> * * This implementation returns the default header renderer's preferred height as measured * with a dummy value if the input height is 0, otherwise returns the height * unchanged. * * @param height the initial height. * @return a reasonable minimal preferred height. * * @see #getPreferredSize() * @see #getPreferredSize(Dimension) */ protected int getMinimumHeight(int height) { if ((height == 0)) { // && (getXTable() != null) // && getXTable().isColumnControlVisible()){ TableCellRenderer renderer = getDefaultRenderer(); Component comp = renderer.getTableCellRendererComponent(getTable(), "dummy", false, false, -1, -1); height = comp.getPreferredSize().height; } return height; }
final JTable table = new JXTable(new AncientSwingTeam()); table.setRowSorter(new MyTableRowSorter(table.getModel())); Action toggle = new AbstractAction("toggleSort") { @Override public void actionPerformed(ActionEvent e) { JXTableHeader header = SwingXUtilities.getAncestor( JXTableHeader.class, (Component) e.getSource()); Point trigger = header.getPopupTriggerLocation(); int column = trigger != null ? header.columnAtPoint(trigger) : -1; if (column < 0) return; int modelColumn = header.getTable().convertColumnIndexToModel(column); ((MyTableRowSorter) header.getTable().getRowSorter()) .realToggleSortOrder(modelColumn); } }; JPopupMenu menu = new JPopupMenu(); menu.add(toggle); table.getTableHeader().setComponentPopupMenu(menu);