簡體   English   中英

JList動作偵聽器“延遲”在選擇項目中

[英]JList actionlistener “delay” in selecting item

我有一個最初由ArrayList<SomeClass>填充的JList ,我將其轉換為數組。 然后,將此JList包裝在JScrollPane並顯示在JFrame 當我在其中選擇一個項目時,選擇的第一個項目是正確的,但是之后似乎選擇了上一個項目。 因此,如果我有一個ArrayList<String>填充了“數字0”,“數字1”,“數字2”等,並且我依次選擇了19、18、17,則輸出就像我選擇了19, 19、18:

import java.awt.Dimension;
import javax.swing.*;
import java.util.*;
import javax.swing.event.*;

public class DemoFrame extends JFrame implements ListSelectionListener{
    ArrayList<String> strings;
    public DemoFrame(){
        strings = new ArrayList();
        for (int i=0; i<20; i++){
            strings.add("Number " + i);
        }
        JList demoList = new JList();
        demoList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        demoList.setVisibleRowCount(10);
        JScrollPane listScroller = new JScrollPane(demoList);
        listScroller.setPreferredSize(new Dimension(250, 500)); 
        demoList.setListData(strings.toArray());
        this.add(listScroller);
        demoList.addListSelectionListener(this);
        getContentPane().add(listScroller);
        pack();
        setVisible(true);
    }

    @Override
    public void valueChanged(ListSelectionEvent lse) {
        if (!lse.getValueIsAdjusting()){
            System.out.println(lse.getLastIndex());
            System.out.println(strings.get(lse.getLastIndex()));
        }
    }
}

public class SODemo{
    public static void main(String[] args) {
        DemoFrame demo = new DemoFrame();
    }
}

選擇19、18的輸出。17:

運行:19號19號19號19 18號18

但是,選擇0、1、2的輸出

運行:0數字0 1數字1 2數字2

為什么會這樣?

ListSelectionEvent類中有兩種感興趣的方法:

公共詮釋getFirstIndex()

返回其選擇可能已更改的第一行的索引。

公共詮釋getLastIndex()

返回其選擇可能已更改的最后一行的索引。

因此,選擇事件實際上涉及2個列表元素,一個是獲得焦點,一個是失去焦點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM