Как получить индекс Arraylist через mouselistener?

Я поместил Arraylist в JList и хочу получить значение/индекс Arraylist при щелчке мыши по Jlist. я пробовал с этими строками, но он всегда показывает -1 как индекс на консоли для каждого нажатого элемента. вот часть моего кода..

list2.addMouseListener(new MouseListener(){
            public void mouseClicked(MouseEvent e){
                 JPanel MousePanel=new JPanel();
                 JList listp=new JList(PatientDetailArlist.toArray());

                 int index = listp.getSelectedIndex();
                 System.out.println("Index Selected: " + index);
                 String sp = (String) listp.getSelectedValue();
                 System.out.println("Value Selected: " + sp.toString());

                 MousePanel.add(listp);


                tab.add("tab4",MousePanel);
                visibleGui();
                }

person Amrita CSE    schedule 22.11.2017    source источник
comment
Код создает новый listp, поэтому в этот момент никакое взаимодействие невозможно. Попробуйте разделить создание компонента и взаимодействие с ним.   -  person Andrew S    schedule 22.11.2017


Ответы (1)


Вы добавляете MouseListener в «list2», который является вашим JList.

list2.addMouseListener(new MouseListener(){

Но тогда в вашем коде вы по какой-то причине создаете новый JList? Хорошо, что JList не виден в графическом интерфейсе, поэтому он никак не может иметь выбранный индекс.

 JList listp=new JList(PatientDetailArlist.toArray());
 int index = listp.getSelectedIndex();

Все, что вам нужно в коде слушателя, это:

 int index = list2.getSelectedIndex();

Или еще лучше получить компонент JList, который был нажат из MouseEvent:

JList list = (JList)e.getSource();
int index = list.getSelectedIndex();

Однако это все еще не очень хорошее решение. Что, если пользователь использует клавиатуру для выбора элемента? Надлежащий дизайн графического интерфейса должен позволять пользователю использовать мышь или клавиатуру.

Поэтому вам не следует использовать MouseListener. Вместо этого вы должны использовать ListSelectionListener для прослушивания изменений в выборе элемента в списке.

Прочтите раздел руководства Swing по Как написать ListSelectionListener для получения дополнительной информации и примеров для начала работы.

person camickr    schedule 22.11.2017