我创建了一个jlist并使用setModel方法设置了一个默认列表模型。当我调用getSelectedIndex()时,它返回-1。为什么?
if (!listAdded.isSelectionEmpty()) {
listModelAdded.removeElementAt(listAdded.getSelectedIndex());
listBankQuestions.remove(listAdded.getSelectedIndex());
System.out.println(i);
--i;
System.out.println("Selected : " + listAdded.getSelectedIndex());
}
答案 0 :(得分:6)
如果未选择任何项目,方法getSelectedIndex()
将返回-1
答案 1 :(得分:4)
javadoc明确指出,如果没有选择项目,getSelectedIndex()
将返回-1。
如果您认为自己不应该看到-1
,那么我可以想到三个解释:
其他(在您的代码中)正在删除选择,然后 getSelectedIndex()
来电。
您正在错误地访问Swing数据结构。如果您尝试从事件侦听器线程以外的其他线程访问它们,则无法保证它将看到正确的状态。
你在某种程度上误解了症状;例如你在错误的对象上调用getSelectedIndex()
。
(最后一种可能性是“它是一个Swing bug”......但在任何人打电话之前,你需要提供一个适当的SSCCE来证明这个问题。坦率地说,我认为这不太可能真的是一个Swing bug。)
答案 2 :(得分:0)
因为您删除了所选项目,所以没有选择(选择已删除)且返回值为-1
答案 3 :(得分:0)
就个人而言,我不得不使用.locationToIndex,因为.getSelectedIndex没有正确工作,右键单击,返回-1。这是一些有效的代码:
tileSelector.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
// get Selected Tile
int idx = tileSelector.locationToIndex(e.getPoint());
tileSelector.setSelectedIndex(idx);
if (SwingUtilities.isLeftMouseButton(e)) {
debugOutput.append(idx + " Left Click\n");
debugOutput.setCaretPosition(debugOutput.getDocument().getLength());
} else if (SwingUtilities.isRightMouseButton(e)) {
debugOutput.append(idx + " Right Click\n");
debugOutput.setCaretPosition(debugOutput.getDocument().getLength());
}
}
});