想要从JList中获取选定的索引。但返回-1

时间:2013-08-19 02:07:29

标签: java swing jlist

我创建了一个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());
}

4 个答案:

答案 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());
        }
    }
});