更新时间:2023-12-03 19:08:28
中的代码> RowSorterListener
是指定正确返回索引(来自 RowSorterListener
s event)
code in RowSorterListener
is designatet to returns the index correctly (from RowSorterListener
s event)
默认情况下,你永远不需要知道 JTable的订购
s视图,所有这些事件都是模型事件
,
by default you never need to know ordering from JTable
s view, all those events are models events
,
add TableColumnModelListener
如果要跟踪 columnMoved
,则以编码方式排序的所有事件都将绘制在中JTable
正确查看
add TableColumnModelListener
in the case that you want to trace columnMoved
, all events from sorting programatically are painted in JTable
s view correctly
1st。没有列重新排序的attemtp,
1st. attemtp without column reordering,
Column NO. - 0 is sorted
Column NO. - 1 is sorted
Column NO. - 2 is sorted
Column NO. - 3 is sorted
Column NO. - 4 is sorted
... and so on
BUILD SUCCESSFUL (total time: 21 seconds)
。
。
Column NO. - 0 is sorted
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
Column NO. - 1 is sorted
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnSelectionChanged from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
Column NO. - 2 is sorted
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
columnMoved from ColumnModelListener
Column NO. - 3 is sorted
Column NO. - 4 is sorted
Column NO. - 0 is sorted
Column NO. - 1 is sorted
Column NO. - 2 is sorted
BUILD SUCCESSFUL (total time: 10 seconds)
第三。如果没有初始化Swing Timer并且所有事件都是由用户手提出的,那么尝试相同的正确输出
3rd. attempt the same correct output if Swing Timer isn't initialized and all event are made by users hand
例如
。
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import javax.swing.*;
import javax.swing.RowSorter.SortKey;
import javax.swing.event.*;
import javax.swing.table.*;
public class SortTest1 {
private JFrame frame = new JFrame(getClass().getSimpleName());
private DefaultTableModel model = new DefaultTableModel(10, 5) {
private static final long serialVersionUID = 1L;
@Override
public Class<?> getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
private JTable table = new JTable(model);
private TableRowSorter<?> sorter;
private static final Random rnd = new Random();
private Timer timer;
private int columnNo = 0;
public SortTest1() {
for (int row = model.getRowCount(); --row >= 0;) {
int i = 20 + row % 20;
model.setValueAt(row + " " + i, row, 0);
model.setValueAt(i + row, row, 1);
model.setValueAt(rnd.nextBoolean(), row, 2);
model.setValueAt(rnd.nextDouble(), row, 3);
model.setValueAt(row + " " + i * 1, row, 4);
}
table.setAutoCreateRowSorter(true);
sorter = (TableRowSorter<?>) table.getRowSorter();
sorter.setSortsOnUpdates(true);
sorter.addRowSorterListener(new RowSorterListener() {
@Override
public void sorterChanged(RowSorterEvent rse) {
if (rse.getType() == RowSorterEvent.Type.SORT_ORDER_CHANGED) {
List<SortKey> keys = rse.getSource().getSortKeys();
for (SortKey key : keys) {
System.out.println("Column NO. - " + key.getColumn() + " is sorted");
if (key.getColumn() == 0) {
break;
} else {
break;
}
}
}
}
});
frame.add(new JScrollPane(table));
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.getColumnModel().addColumnModelListener(new TableColumnModelListener() {
// just handle columnMarginChanged to re-paint headings
@Override
public void columnMarginChanged(ChangeEvent e) {
System.out.println("columnMarginChanged from ColumnModelListener");
}
@Override
public void columnAdded(TableColumnModelEvent e) {
System.out.println("columnAdded from ColumnModelListener");
}
@Override
public void columnRemoved(TableColumnModelEvent e) {
System.out.println("columnRemovedfrom ColumnModelListener");
}
@Override
public void columnMoved(TableColumnModelEvent e) {
System.out.println("columnMoved from ColumnModelListener");
}
@Override
public void columnSelectionChanged(ListSelectionEvent e) {
System.out.println("columnSelectionChanged from ColumnModelListener");
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
timer = new javax.swing.Timer(1000, updateCol());
timer.setRepeats(true);
timer.start();
}
private Action updateCol() {
return new AbstractAction("Sort JTable") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
if (columnNo > 4) {
columnNo = 0;
sorter.setSortKeys(Arrays.asList(new RowSorter.SortKey(columnNo, SortOrder.ASCENDING)));
} else {
sorter.setSortKeys(Arrays.asList(new RowSorter.SortKey(columnNo, SortOrder.ASCENDING)));
columnNo++;
}
}
};
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
new SortTest1();
});
}
}