protected JTableHeader createDefaultTableHeader() { if (dataTableHeader == null) { dataTableHeader = new JTableHeader(getDataColumnModel()); dataTableHeader.setResizingAllowed(true); dataTableHeader.setTable(dataTable); } return (dataTableHeader); }
/** * Sets the associated JTable. Enables enhanced header features if table is of type JXTable. * * <p>PENDING: who is responsible for synching the columnModel? */ public void setTable(JTable table) { super.setTable(table); // setColumnModel(table.getColumnModel()); // the additional listening option makes sense only if the table // actually is a JXTable if (getXTable() != null) { installHeaderListener(); } else { uninstallHeaderListener(); } }
/** * Updates the column header component in the scroll pane. This depends on the current results * view and whether the sponsored results are visible. */ private void syncColumnHeader() { Component resultHeader = resultsContainer.getScrollPaneHeader(); if (resultHeader == null) { // If no headers, use nothing special. scrollPane.setColumnHeaderView(null); } else if (!sponsoredResultsPanel.isVisible()) { // If sponsored results aren't visible, just use the actual header. scrollPane.setColumnHeaderView(resultHeader); } else { // Otherwise, create a combined panel that has both sponsored results & header. JXPanel headerPanel = new JXPanel(); // Make sure this syncs with the layout for the results & sponsored results! headerPanel.setLayout(new MigLayout("hidemode 3, gap 0, insets 0", "[]", "[grow][]")); headerPanel.add(resultHeader, "grow, push, alignx left, aligny top"); DefaultTableColumnModel model = new DefaultTableColumnModel(); TableColumn column = new TableColumn(); model.addColumn(column); JTableHeader header = new JTableHeader(model); header.setDefaultRenderer(new TableCellHeaderRenderer()); header.setReorderingAllowed(false); header.setResizingAllowed(false); header.setTable(new JXTable(0, 1)); int width = sponsoredResultsPanel.getPreferredSize().width; int height = resultHeader.getPreferredSize().height; column.setWidth(width); Dimension dimension = new Dimension(width, height); header.setPreferredSize(dimension); header.setMaximumSize(dimension); header.setMinimumSize(dimension); headerPanel.add(header, "aligny top, alignx right"); scrollPane.setColumnHeaderView(headerPanel); } scrollPane.validate(); // Resize and repaint table header. This eliminates visual issues due // to a change in the table format, which can result in an incorrect // header height or header flickering when a category is selected. if (resultHeader instanceof JTableHeader) { ((JTableHeader) resultHeader).resizeAndRepaint(); } }