我正在创建一个基于swing的应用程序,其中我有一个JList,它定期使用相同数据的不同顺序进行更新,不经常更新新项目,并且不经常使用较少的项目进行更新。我正试图找出使这个看起来很好的最佳方法。现在,我只是打电话给
JList.setListData(String [] data);
看起来不太好,它会清除所选项目。
我想要一种更新它的方法,只有当它从列表中删除时才清除所选项目,否则保持选择相同的项目,即使它们的索引发生变化。我正在考虑跟踪选择哪些索引,然后在更改数据后设置所选项目,但这听起来很糟糕。我还查看了ListModels并跟踪了我自己,但似乎选择了哪些项目保存在JList本身中,这样也无法正常工作。
我真的很感激任何建议。
答案 0 :(得分:4)
似乎标准JList
没有调整排序的方法(为什么它们只是将它添加到JTable
...),但有一个tutorial for sorted lists < / p>
答案 1 :(得分:4)
我让你成为一个有效的榜样。
我已经按照您的要求使用了JList
,添加了从列表中提取,添加和删除的按钮。
无论如何,希望这有帮助!
干杯。
public class Test {
private static String selectedValue = null;
private static JList jList = new JList();
public static void main(String args[]) {
JFrame jFrame = new JFrame();
jFrame.setSize(500, 500);
jFrame.setLocationRelativeTo(null);
jFrame.setLayout(new GridLayout(4, 1));
jList = new JList(new String[]{"1", "2", "3", "4", "5"});
jFrame.add(jList);
JButton rearrangeButton = new JButton("rearrange");
rearrangeButton.addActionListener(new Test().new SelectedListener());
jFrame.add(rearrangeButton);
JButton addButton = new JButton("add");
addButton.addActionListener(new Test().new SelectedListener());
jFrame.add(addButton);
JButton deleteButton = new JButton("delete");
deleteButton.addActionListener(new Test().new SelectedListener());
jFrame.add(deleteButton);
jFrame.setVisible(true);
}
private class SelectedListener implements ActionListener {
public void actionPerformed(ActionEvent actionEvent) {
storeSelected();
if (actionEvent.getActionCommand().equalsIgnoreCase("rearrange")) {
jList.setListData(new String[]{"5", "4", "3", "2", "1"});
} else if (actionEvent.getActionCommand().equalsIgnoreCase("add")) {
List< String> items = new ArrayList< String>();
for (int item = 0; item < jList.getModel().getSize(); item++) {
items.add(jList.getModel().getElementAt(item).toString());
}
items.add("new");
jList.setListData(items.toArray());
} else if (actionEvent.getActionCommand().equalsIgnoreCase("delete")) {
List< String> items = new ArrayList< String>();
for (int item = 0; item < jList.getModel().getSize(); item++) {
items.add(jList.getModel().getElementAt(item).toString());
}
items.remove(0);
jList.setListData(items.toArray());
}
reSelect();
}
}
private static void storeSelected() {
if (jList.getSelectedIndex() > -1) {
selectedValue = jList.getSelectedValue().toString();
} else {
selectedValue = null;
}
}
private static void reSelect() {
if (selectedValue != null) {
jList.setSelectedValue(selectedValue, true);
}
}
}