如何在JavaSwing中对jComboBox元素进行排序?
如何将如何在JavaSwing中对jComboBox元素进行排序?,java,swing,jcombobox,Java,Swing,Jcombobox,如何将jComboBox元素列表排序到已排序的列表中 JComboBox box=new JComboBox(); box.addItem("abc"); box.addItem("zzz"); box.addItem("ccc"); add(box); 我使用了许多jComboBox组件,但它不起作用。 如何将此列表按升序排序?您可以查看 此模型扩展了DefaultComboxModel,并具有两个附加的 内置的一些功能: 创建模型后,所提供的数据将在 将新项添加到模型时,数据将添加到模型
jComboBox
元素列表排序到已排序的列表中
JComboBox box=new JComboBox();
box.addItem("abc");
box.addItem("zzz");
box.addItem("ccc");
add(box);
我使用了许多jComboBox组件,但它不起作用。
如何将此列表按升序排序?您可以查看 此模型扩展了DefaultComboxModel,并具有两个附加的 内置的一些功能:
- 创建模型后,所提供的数据将在
- 将新项添加到模型时,数据将添加到模型中 将插入项目,以保持排序顺序
String[]items={“一”、“二”、“三”};
SortedComboxModel=新的SortedComboxModel(项目);
JComboBox组合框=新的JComboBox(型号);
组合框。添加项(“四”);
组合框。附加项(“五”);
comboBox.setSelectedItem(“一”);
您可以覆盖
addItem
的默认行为以满足您的需要
可运行示例
public class SortedCombobox {
@SuppressWarnings("serial")
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("Overriden JCombobox");
frame.getContentPane().setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComboBox box = new JComboBox(){
@Override public void addItem(Object obj){
int count = getItemCount();
String toAdd = (String) obj;
List<String> items = new ArrayList<String>();
for(int i = 0; i < count; i++){
items.add((String)getItemAt(i));
}
if(items.size() == 0){
super.addItem(toAdd);
return;
}else{
if(toAdd.compareTo(items.get(0)) <= 0){
insertItemAt(toAdd, 0);
}else{
int lastIndexOfHigherNum = 0;
for(int i = 0; i < count; i++){
if(toAdd.compareTo(items.get(i)) > 0){
lastIndexOfHigherNum = i;
}
}
insertItemAt(toAdd, lastIndexOfHigherNum+1);
}
}
}
};
box.addItem("zzz");
box.addItem("hh");
box.addItem("aa");
box.addItem("yy");
box.addItem("uu");
box.addItem("bb");
box.addItem("rr");
box.addItem("aa");
box.setSelectedIndex(0);
frame.getContentPane().add(box);
frame.pack();
frame.setVisible(true);
}
});
}
}
公共类分类邮箱{
@抑制警告(“串行”)
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
JFrame frame=新JFrame(“覆盖的JCombobox”);
frame.getContentPane().setLayout(新的BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComboBox=newjcombobox(){
@替代公共无效附加项(对象obj){
int count=getItemCount();
字符串toAdd=(字符串)obj;
列表项=新建ArrayList();
for(int i=0;i
来自Alexis C.的SortedComboxModel链接似乎不再有效,尽管源链接仍然有效
尽管如此,我还是为实现Comparable(基于)的类创建了一个SortedComboxModel
public类sortedComboxModel只需按正确的顺序添加它们。您可以先将它们添加到列表中
,然后使用集合#排序
避免手动排序需要在运行时添加元素。在这种情况下,请参见mutableComboxModel#insertElementAt
public class SortedCombobox {
@SuppressWarnings("serial")
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("Overriden JCombobox");
frame.getContentPane().setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComboBox box = new JComboBox(){
@Override public void addItem(Object obj){
int count = getItemCount();
String toAdd = (String) obj;
List<String> items = new ArrayList<String>();
for(int i = 0; i < count; i++){
items.add((String)getItemAt(i));
}
if(items.size() == 0){
super.addItem(toAdd);
return;
}else{
if(toAdd.compareTo(items.get(0)) <= 0){
insertItemAt(toAdd, 0);
}else{
int lastIndexOfHigherNum = 0;
for(int i = 0; i < count; i++){
if(toAdd.compareTo(items.get(i)) > 0){
lastIndexOfHigherNum = i;
}
}
insertItemAt(toAdd, lastIndexOfHigherNum+1);
}
}
}
};
box.addItem("zzz");
box.addItem("hh");
box.addItem("aa");
box.addItem("yy");
box.addItem("uu");
box.addItem("bb");
box.addItem("rr");
box.addItem("aa");
box.setSelectedIndex(0);
frame.getContentPane().add(box);
frame.pack();
frame.setVisible(true);
}
});
}
}
public class SortedComboBoxModel<E extends Comparable<? super E>> extends DefaultComboBoxModel<E> {
public SortedComboBoxModel() {
super();
}
public SortedComboBoxModel(E[] items) {
Arrays.sort(items);
int size = items.length;
for (int i = 0; i < size; i++) {
super.addElement(items[i]);
}
setSelectedItem(items[0]);
}
public SortedComboBoxModel(Vector<E> items) {
Collections.sort(items);
int size = items.size();
for (int i = 0; i < size; i++) {
super.addElement(items.elementAt(i));
}
setSelectedItem(items.elementAt(0));
}
@Override
public void addElement(E element) {
insertElementAt(element, 0);
}
@Override
public void insertElementAt(E element, int index) {
int size = getSize();
for (index = 0; index < size; index++) {
Comparable c = (Comparable) getElementAt(index);
if (c.compareTo(element) > 0) {
break;
}
}
super.insertElementAt(element, index);
}
}
public static void main(String[] args) {
javax.swing.JComboBox<String> sortedComboBox = new javax.swing.JComboBox<>();
String[] testArray = new String[]{"DDD", "AAA", "CCC", "BBB"};
sortedComboBox.setModel(new SortedComboBoxModel<>(testArray));
//print out the sorted contents
for (int i = 0; i < sortedComboBox.getItemCount(); i++) {
System.out.println(i + ": " + sortedComboBox.getItemAt(i));
}
}