如何只对 JTable 中指定的列进行排序?
How to sort only specified columns in JTable?
我有一个 table 列 |名称 |开始|完成 |时间 |地点 |点 | 并且我想在按时间排序 table 时将地点和点分开。有没有办法在不创建两个 table 的情况下做到这一点?
所以,我想到了使用 TableCellRenderer for Place and Points columns as Manu suggested by sharing this link。
首先,我创建了 CustomTableCellRenderer 并使用此方法设置值:
public class CustomCellRenderer extends JLabel implements TableCellRenderer{
...
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if(column==this.columnPlace){
// set Place
setText(Integer.toString(row+1));
}
else{
// set Points depending on competitorsCount and row
setText(Integer.toString(points[competitorsCount-1][row]));
}
return this;
}
}
然后我为这些列设置了这个自定义渲染器:
CustomCellRenderer customRenderer = new CustomCellRenderer(competitorsCount);
customRenderer.setHorizontalAlignment(JLabel.CENTER);
tableColumnModel.getColumn(columnPlace).setCellRenderer(customRenderer);
tableColumnModel.getColumn(columnPoints).setCellRenderer(customRenderer);
我有一个 table 列 |名称 |开始|完成 |时间 |地点 |点 | 并且我想在按时间排序 table 时将地点和点分开。有没有办法在不创建两个 table 的情况下做到这一点?
所以,我想到了使用 TableCellRenderer for Place and Points columns as Manu suggested by sharing this link。
首先,我创建了 CustomTableCellRenderer 并使用此方法设置值:
public class CustomCellRenderer extends JLabel implements TableCellRenderer{
...
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if(column==this.columnPlace){
// set Place
setText(Integer.toString(row+1));
}
else{
// set Points depending on competitorsCount and row
setText(Integer.toString(points[competitorsCount-1][row]));
}
return this;
}
}
然后我为这些列设置了这个自定义渲染器:
CustomCellRenderer customRenderer = new CustomCellRenderer(competitorsCount);
customRenderer.setHorizontalAlignment(JLabel.CENTER);
tableColumnModel.getColumn(columnPlace).setCellRenderer(customRenderer);
tableColumnModel.getColumn(columnPoints).setCellRenderer(customRenderer);