当前位置:  开发笔记 > 编程语言 > 正文

为什么JList选择会出现两次?

如何解决《为什么JList选择会出现两次?》经验,为你挑选了1个好方法。

我有一个带有一些项目的JList.我已经为选择列表中的项目时添加了一个监听器.以下是选择列表中的项目时会发生什么的代码:

private void questionaireNamesListValueChanged(ListSelectionEvent evt) {
    try {
        inputPanel.setEnabled(false);
        inputPanel.setVisible(false);
        inputTextField.setText("");
        inputStatusLabel.setText("");
        int questionaireIndex = questionaireNamesList.getSelectedIndex();

        // Why will this be printed twice?
        System.out.println("Questionaire Index: " + questionaireIndex);

        if (remoteQuestionServer.getQuestionCount(questionaireIndex) == 5) {
            answerQuestionButton.setEnabled(true);
            addQuestionButton.setEnabled(false);
        } else {
            addQuestionButton.setEnabled(true);
            answerQuestionButton.setEnabled(false);
        }
    } catch (RemoteException ex) {
        ex.printStackTrace();
    }
} 

你可以在上面我发表一个System.out.print声明,每当我点击列表中的某些内容时,我就会获得该项目的两个输出,例如.

Questionaire Index: 4
Questionaire Index: 4
Questionaire Index: 2
Questionaire Index: 2
Questionaire Index: 0
Questionaire Index: 0
Questionaire Index: 2
Questionaire Index: 2

知道为什么会这样吗?

谢谢,帕特里克



1> Eddie..:

更改选择时,可能会发生一个或两个事件,具体取决于实现.如果选择索引#4并单击第二个项目,则会发生以下情况:

首先,索引#4是UNSELECTED.根据型号,questionaireNamesList.getSelectedIndex()可以合法地返回2或-1.

第二,索引#2是SELECTED.此时,questionaireNamesList.getSelectedIndex()肯定会返回2.

因此,有两个事件被解雇.如何生成这些事件的定义允许不同JVM实现的余地确实略有不同.

注意:您应该检查值,ListSelectionEvent#getValueIsAdjusting()以查看您正在处理的事件是否是一系列事件中的事件.您可能需要忽略返回的所有事件true.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有