NefaultListModel 객체가 추가 한 JList 요소에 리스너 이벤트를 추가하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com//questions/21046946

문제

2 명의 JLists의 AddGrouplist '와'AddApkList '를 만들었습니다.Model.addelement (ArrayList1.get (ArrayList1.size () - 1))를 사용하여 addGroupList에 요소를 추가하고 있습니다.addGroupList의 선택된 값을 기반으로 addApkList를 업데이트하고 싶습니다.이를 위해 목록 항목이 선택되어 있지만 이벤트가 트리거링되지 않으면 이벤트 리스너를 추가 할 수 있습니다. 이것을 성취하기 위해 무엇을해야합니까? 다음 코드가 사용하는 코드입니다.

    model1 = new DefaultListModel();
    model2 = new DefaultListModel();

    addApkList = new JList(model1);
    addGroupList = new JList(model2);

    scrollPane1 = new JScrollPane();
    scrollPane1.setViewportView(addApkList);
    scrollPane2 = new JScrollPane();
    scrollPane2.setViewportView(addGroupList);
.

이 방법으로 JList를 정의했습니다. 다음과 같은 방법으로 AddGroupList

에 요소를 추가했습니다.
model1.addElement(arrayList1.get(arrayList1.size()-1));
.

과 다음과 같은 방법으로 리스너를 추가했습니다.

addGroupList.addListSelectionListener(new ListSelectionListener() {

        @Override
        public void valueChanged(ListSelectionEvent lse) {
            if (!lse.getValueIsAdjusting()) {
              System.out.println("Selection trigerred");
            }
        }
    });
.

이 코드의 변경 사항은 발생하지 않습니다.내가 뭘 잘못하고 있니? 또한 다음을 시도했습니다

model1.addListDataListener(new ListDataListener() {

            @Override
            public void intervalAdded(ListDataEvent lde) {
                System.out.println("ddddddddddd");
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }

            @Override
            public void intervalRemoved(ListDataEvent lde) {
                System.out.println("ddddddddddd");
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }

            @Override
            public void contentsChanged(ListDataEvent lde) {
                System.out.println("ddddddddddd");
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }
        });
.

도움이 되었습니까?

해결책

다음과 같은 방법으로 AddGroupList

에 요소를 추가했습니다.
model1.addElement(arrayList1.get(arrayList1.size()-1));
.

아니, 그렇지 않았습니다.model1addApkList가 아닌 addGroupList의 목록 모델입니다.

 addApkList = new JList(model1);
.

그것은 model2.addElement(arrayList1.get(arrayList1.size()-1))이어야합니다.

어떤 경우에도 ListSelectionEvent 목록 모델에 항목을 추가 할 때 발생합니다.그것은 일어나지 않을 것입니다.추가 된 항목을 선택한 항목으로 설정해야합니다.

Object item = arrayList1.get(arrayList1.size()-1);
model2.addElement(item);
addGroupList.setSelectedValue(item, true);
.

jlist.setselectedValue (object anobject, boolean saysscroll) 자세한 내용은

다른 팁

2 명의 JLists의 AddGrouplist '와'AddApkList '를 만들었습니다.나는 추가하고있다 addGrouplist를 사용하는 요소 model.addelement (ArrayList1.get (ArrayList1.size () - 1));나는 그 것이다, I. AddGroupList의 선택된 값을 기반으로 AddApkList를 업데이트하고 싶습니다.에 대한 이것은 내가 행동 할 수 있도록 이벤트 리스너를 추가하려고합니다. 목록 항목이 선택되어 있지만 이벤트가 트리거링되지 않는 것입니다. 이것을 성취하기 위해 무엇을해야합니까?다음 코드가 사용하는 코드입니다.

예 :

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Testing extends JFrame {

    private static final long serialVersionUID = 1L;
    private DefaultListModel listModel = new DefaultListModel();
    private DefaultListModel listModelEmpty = new DefaultListModel();
    private JList list = new JList(listModel);
    private JList listEmpty = new JList(listModelEmpty);
    private JPanel panel = new JPanel(new GridLayout(1, 1));
    private int currentSelectedRow = 0;
    private int xX = 0;

    public Testing() {
        setLocation(400, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        for (int x = 0; x < 9; x++) {
            listModel.addElement("" + x);
            xX++;
        }
        JScrollPane sp = new JScrollPane(list);
        list.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent lse) {
                if (!lse.getValueIsAdjusting()) {
                    System.out.println("Selection trigerred");
                }
            }
        });
        JScrollPane spEmpty = new JScrollPane(listEmpty);
        panel.add(spEmpty);
        panel.add(sp);
        add(panel, BorderLayout.CENTER);
        JButton btn1 = new JButton("Reset Model CastingModel");
        add(btn1, BorderLayout.NORTH);
        btn1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                //list.clearSelection();
                DefaultListModel model = (DefaultListModel) list.getModel();
                model.removeAllElements();
                for (int x = 0; x < 9; x++) {
                    model.addElement("" + (x + xX));
                    xX++;
                }
                list.setModel(model);
            }
        });

        JButton btn2 = new JButton("Reset Model directly from Model");
        add(btn2, BorderLayout.SOUTH);
        btn2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                //list.clearSelection();
                listModel.removeAllElements();
                for (int x = 0; x < 9; x++) {
                    listModel.addElement("" + (x + xX));
                    xX++;
                }
            }
        });
        pack();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Testing().setVisible(true);
            }
        });
    }
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top