这个自定义TableRowSorter的目的是为我提供不同的列排序顺序。将排序顺序更改为
SortOrder.UNSORTED => SortOrder.ASCENDING => SortOrder.DESCENDING => SortOrder.ASCENDING => SortOrder.DESCENDING => .
至
SortOrder.UNSORTED => SortOrder.ASCENDING => SortOrder.DESCENDING =>SortOrder.UNSORTED => SortOrder.ASCENDING => SortOrder.DESCENDING => .
程序中有变量来自动继续排序顺序,即使列中有一个初始的排序键,它即将排序,就像下面的示例实现一样。
我想知道你是否认为这个程序能做它想要做的事情。我特别感兴趣的是你对该计划的效率的想法,以及是否可以对其进行任何改进。
package order;
import java.util.ArrayList;
import java.util.List;
import javax.swing.SortOrder;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
public class ADU_SortOrder<M extends TableModel> extends TableRowSorter<M> {
public ADU_SortOrder(M model) {
setModel(model);
}
boolean firstTime = true; //Needed in case there are any initial sort keys
int columnHolder = -1;
@Override
public void toggleSortOrder(int column) {
List<? extends SortKey> sortKeys = getSortKeys();
if(sortKeys.size() == 0) { //For if there are no initial sort keys
List<SortKey> keys = new ArrayList<SortKey>();
keys.add(new SortKey(column, SortOrder.ASCENDING));
setSortKeys(keys);
return;
}
if (sortKeys.size() > 0 && columnHolder == column || firstTime) {
if(firstTime) {
firstTime = false;
columnHolder = column;
if(column != sortKeys.get(0).getColumn()) {
List<SortKey> keys = new ArrayList<SortKey>(getSortKeys());
keys.set(0, new SortKey(column, SortOrder.ASCENDING));
setSortKeys(keys);
return;
}
}
List<SortKey> keys = new ArrayList<SortKey>(getSortKeys());
keys.set(0, new SortKey(column, setNextOrder(sortKeys.get(0).getSortOrder())));
setSortKeys(keys);
return;
} else if(sortKeys.size() > 0 && columnHolder != column && !firstTime) {
List<SortKey> keys = new ArrayList<SortKey>(getSortKeys());
keys.set(0, new SortKey(column, SortOrder.ASCENDING));
setSortKeys(keys);
columnHolder = column;
return;
}
super.toggleSortOrder(column);
}
private SortOrder setNextOrder(SortOrder order) {
switch (order) {
case ASCENDING:
return SortOrder.DESCENDING;
case DESCENDING:
return SortOrder.UNSORTED;
case UNSORTED:
return SortOrder.ASCENDING;
default:
return SortOrder.UNSORTED;
}
}
}JTableTest.java
示例实现
import java.awt.GridLayout;
import java.util.List;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;
import javax.swing.RowSorter;
import javax.swing.SortOrder;
import order.ADU_SortOrder;
@SuppressWarnings("serial")
public class JTableTest extends JFrame {
private JTableTest() {
super("JTable Test");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(1, 1));
createPanel();
pack();
setVisible(true);
}
JPanel panel = new JPanel(new GridLayout(1, 1));
JScrollPane scroll;
private void createPanel() {
Object[] headers = {"Select", "Title", "Artist", "Length", "Title"};
Object[][] sampleData = {{true, "Bat Outta Hell", "Meat Loaf", "673", "Bat Outta Hell"},
{false, "Spanish Train", "Chris De Burgh", "358", "Spanish Train"},
{true, "Bat Outta Hell", "Meat Loaf", "673", "Bat Outta Hell"}};
JTable table = new JTable(sampleData, headers);
//Sort Order Part
ADU_SortOrder<TableModel> sortOrder = new ADU_SortOrder<TableModel>(table.getModel());
List<RowSorter.SortKey> sortKeys = new ArrayList<>();
sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING));
sortOrder.setSortKeys(sortKeys);
table.setRowSorter(sortOrder);
scroll = new JScrollPane(table);
panel.add(scroll);
getContentPane().add(panel);
}
public static void main(String[] args) {
new JTableTest();
}
}欢迎并赞赏任何其他意见、建议或建议。
发布于 2016-11-25 23:46:56
if(sortKeys.size() == 0) { //For if there are no initial sort keys
写起来更规范
if (sortKeys.isEmpty()) {而且,要么size为0,要么大于0。没有其他选择。因此,您不需要检查size是否大于0。如果没有从这个块中提取return,则size必须大于0。所以你不需要检查。
if (sortKeys.size() > 0 && columnHolder == column || firstTime) {
和
} else if(sortKeys.size() > 0 && columnHolder != column && !firstTime) {
如果我们放弃size检查,这些可能只是
if (columnHolder == column || firstTime) {和
} else {这
super.toggleSortOrder(column);
是不必要的。在达到这个目标之前,您总是return。
https://codereview.stackexchange.com/questions/148073
复制相似问题