我有一个通过添加到底层listModel动态填充的jList。现在,如果我有三个字符串,其价值我知道,我做
for(i=0;i<3;i++){
jList.setSelectedValue(obj[i],true);//true is for shouldScroll or not
}
只有最后一项似乎被选中...如果无法做到这一点我必须从基础模型中设置选择我应该怎么做呢???
另请注意,jList具有选择模式:
jList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
先谢谢
答案 0 :(得分:10)
请注意,所有xxSelectedValue方法都是围绕在JList上的selectionModel(仅支持基于索引的选择访问)的便捷包装方法。不支持设置多个选项每个值。如果你真的想要它,你必须自己实现一个方便的方法。基本上,你必须遍历模型的元素,直到找到相应的索引并调用基于索引的方法,如:
public void setSelectedValues(JList list, Object... values) {
list.clearSelection();
for (Object value : values) {
int index = getIndex(list.getModel(), value);
if (index >=0) {
list.addSelectionInterval(index, index);
}
}
list.ensureIndexIsVisible(list.getSelectedIndex());
}
public int getIndex(ListModel model, Object value) {
if (value == null) return -1;
if (model instanceof DefaultListModel) {
return ((DefaultListModel) model).indexOf(value);
}
for (int i = 0; i < model.getSize(); i++) {
if (value.equals(model.getElementAt(i))) return i;
}
return -1;
}
答案 1 :(得分:3)
jList.addSelectionInterval(0,2);
答案 2 :(得分:-2)
虽然StanislasV answer完全有效,但我宁愿避免将一个选择间隔添加到另一个。相反,您应该更喜欢像这样调用JList
关联的ListSelectionModel#setSelectionInterval(int, int)
方法:
jList.getSelectionModel().setSelectionInterval(0, 3)
如果您希望列表选择不相交,则还需要编写自己的ListSelectionModel
。