繁体   English   中英

如何将侦听器事件添加到由DefaultListModel对象添加的JList元素?

[英]How to add listener event to JList elements which are added by DefaultListModel object?

我创建了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");
            }
        }
    });

这段代码似乎没有任何变化。 什么mi做错了? 我也试过了

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 shouldScroll)以获取更多详细信息。

我创建了2个JLists的“addGroupList”和“addApkList”。 我正在使用model.addElement(arrayList1.get(arrayList1.size() - 1))向addGroupList添加元素; 问题是,我想根据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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM