JList按字母顺序排列
我有以下演示应用程序显示值的列表,但我需要能够 来控制列表中元素的排序。添加这个最简单的方法是什么?JList按字母顺序排列
package demo;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.ListModel;
public class JListOrder {
public JListOrder()
{
JFrame frame = new JFrame("JListOrder");
DefaultListModel model = new DefaultListModel();
model.addElement("z");
model.addElement("Z");
model.addElement("a");
model.addElement("A");
model.addElement("C");
model.addElement("c");
model.addElement("b");
model.addElement("B");
JList list = new JList(model);
frame.add(list);
frame.setSize(200,200);
frame.setVisible(true);
}
public static void main(String[] args) {
new JListOrder();
}
}
最简单的方法是使用其中SwingX支持排序/ JXList的滤波相同的方式,核心表的排序/过滤:
JXList list = new JXList(model);
list.setAutoCreateRowSorter(true);
list.toggleSortOrder();
DefaultListModel
按照它们添加的顺序显示元素。您可以按顺序添加元素,这就是它们的显示方式。
如果您不希望在将对象添加到JList之前排序对象,那么您可以编写/使用ListModel实现,以保持它们已经为您排序。见例如this implementation。
正如我在几乎所有与JLists/JTables有关的问题中所说的,请查看GlazedLists。它几乎涵盖了所有可以想象的排序和筛选方面。
可以使用Sorted Combo Box Model。我知道是说“组合框”,但它也实现了List接口。
严格来说,这违反了MutableComboBoxModel合约〜 insertElementAt(value,index)〜 - 我将其解释为〜assertEquals(value,model.getElementAt(index))〜(hmm ..任何方式来格式化代码片段的评论? – kleopatra 2011-04-05 17:31:59
无需使用单独的库。只需扩展AbstractListModel并使用TreeSet之类的SortedSet来保存元素。这是一个实现:http://www.java2s.com/Tutorial/Java/0240__Swing/SortedListModelsortableJList.htm([archive](https://archive.today/EoFvn))。或者使用我制作的这个快速分支添加泛型:https://gist.github.com/theAprel/bc661668d7120756b4a8 – Aprel 2015-02-07 06:19:57
如果您不在乎选择状态... ;-) – kleopatra 2015-02-07 08:48:40