mirror of
https://github.com/processing/processing4.git
synced 2026-06-16 04:26:26 +02:00
Added sorting to table
This commit is contained in:
@@ -27,6 +27,7 @@ import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.RowSorter.SortKey;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.event.*;
|
||||
import javax.swing.table.*;
|
||||
@@ -115,6 +116,7 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
table.setColumnSelectionAllowed(false);
|
||||
table.setCellSelectionEnabled(false);
|
||||
table.setAutoCreateColumnsFromModel(true);
|
||||
table.setAutoCreateRowSorter(false);
|
||||
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
table.getSelectionModel()
|
||||
.addListSelectionListener(new ListSelectionListener() {
|
||||
@@ -131,7 +133,10 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel());
|
||||
table.setRowSorter(sorter);
|
||||
sorter.setComparator(1, contribListing.getComparator());
|
||||
|
||||
sorter.setSortable(0, false);
|
||||
sorter.setSortable(2, false);
|
||||
table.getTableHeader().setDefaultRenderer(new MyColumnHeaderRenderer());
|
||||
|
||||
GroupLayout layout = new GroupLayout(this);
|
||||
layout.setHorizontalGroup(layout.createParallelGroup().addComponent(scrollPane));
|
||||
layout.setVerticalGroup(layout.createSequentialGroup().addComponent(scrollPane));
|
||||
@@ -140,6 +145,98 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
table.setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
class MyColumnHeaderRenderer extends DefaultTableCellRenderer {
|
||||
|
||||
/**
|
||||
* Constructs a <code>DefaultTableHeaderCellRenderer</code>.
|
||||
* <P>
|
||||
* The horizontal alignment and text position are set as appropriate to a
|
||||
* table header cell, and the opaque property is set to false.
|
||||
*/
|
||||
public MyColumnHeaderRenderer() {
|
||||
// setHorizontalAlignment(CENTER);
|
||||
setHorizontalTextPosition(LEFT);
|
||||
// setVerticalAlignment(BOTTOM);
|
||||
setOpaque(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the default table header cell renderer.
|
||||
* <P>
|
||||
* If the column is sorted, the appropriate icon is retrieved from the
|
||||
* current Look and Feel, and a border appropriate to a table header cell
|
||||
* is applied.
|
||||
* <P>
|
||||
* Subclasses may override this method to provide custom content or
|
||||
* formatting.
|
||||
*
|
||||
* @param table the <code>JTable</code>.
|
||||
* @param value the value to assign to the header cell
|
||||
* @param isSelected This parameter is ignored.
|
||||
* @param hasFocus This parameter is ignored.
|
||||
* @param row This parameter is ignored.
|
||||
* @param column the column of the header cell to render
|
||||
* @return the default table header cell renderer
|
||||
*/
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable table, Object value,
|
||||
boolean isSelected, boolean hasFocus, int row, int column) {
|
||||
super.getTableCellRendererComponent(table, value,
|
||||
isSelected, hasFocus, row, column);
|
||||
JTableHeader tableHeader = table.getTableHeader();
|
||||
if (tableHeader != null) {
|
||||
setForeground(tableHeader.getForeground());
|
||||
}
|
||||
setIcon(getIcon(table, column));
|
||||
setBackground(Color.WHITE);
|
||||
setBorder(BorderFactory.createCompoundBorder(BorderFactory
|
||||
.createMatteBorder(2, 0, 2, 0, Color.BLACK), BorderFactory
|
||||
.createEmptyBorder(0, (column == 2 ? 17 : 0), 0, 0)));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Overloaded to return an icon suitable to the primary sorted column, or null if
|
||||
* the column is not the primary sort key.
|
||||
*
|
||||
* @param table the <code>JTable</code>.
|
||||
* @param column the column index.
|
||||
* @return the sort icon, or null if the column is unsorted.
|
||||
*/
|
||||
protected Icon getIcon(JTable table, int column) {
|
||||
SortKey sortKey = getSortKey(table, column);
|
||||
if (sortKey != null && table.convertColumnIndexToView(sortKey.getColumn()) == column) {
|
||||
switch (sortKey.getSortOrder()) {
|
||||
case ASCENDING:
|
||||
return UIManager.getIcon("Table.ascendingSortIcon");
|
||||
case DESCENDING:
|
||||
return UIManager.getIcon("Table.descendingSortIcon");
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current sort key, or null if the column is unsorted.
|
||||
*
|
||||
* @param table the table
|
||||
* @param column the column index
|
||||
* @return the SortKey, or null if the column is unsorted
|
||||
*/
|
||||
protected SortKey getSortKey(JTable table, int column) {
|
||||
RowSorter rowSorter = table.getRowSorter();
|
||||
if (rowSorter == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
List sortedColumns = rowSorter.getSortKeys();
|
||||
if (sortedColumns.size() > 0) {
|
||||
return (SortKey) sortedColumns.get(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class StatusRendere extends DefaultTableCellRenderer {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user