1

我制作了一个 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

4 回答 4

7

如果未选择任何项目,则该方法getSelectedIndex()返回-1

于 2013-08-19T02:10:23.827 回答
3

javadoc 明确指出,getSelectedIndex()如果未选择任何项目,则返回 -1。

如果你-1认为你不应该看到,那么我可以想到三种解释:

  • 其他东西(在您的代码中)正在调用发生之前删除选择。getSelectedIndex()

  • 您正在错误地访问 Swing 数据结构。如果您尝试从事件侦听器线程以外的其他线程访问它们,则无法保证它会看到正确的状态。

  • 您以某种方式误读了症状;例如,您调用getSelectedIndex()了错误的对象。

(最后一种可能性是“它是一个 Swing 错误”......但在任何人可以拨打电话之前,您需要提供一个适当的 SSCCE 来证明这个问题。坦率地说,我认为这不太可能真的是一个摆动错误。)

于 2013-08-19T02:20:21.410 回答
0

因为你删除了选中项,所以没有选中项(selection Removed),返回值为-1

于 2013-11-01T12:29:10.167 回答
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());
        }
    }
});
于 2016-01-04T04:03:42.780 回答