繁体   English   中英

一个JList触发向另一个JList添加数据

[英]one JList triggering addition of data to another JList

这是任何人都可以轻松快速地运行的代码,它显示了我的问题:

import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JScrollPane;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.ListSelectionModel;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;

public class Driver extends JFrame {

    public ArrayList<String> RN = new ArrayList<String>();

    private JPanel contentPane;


    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {

                    Driver frame = new Driver();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public Driver() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 605, 497);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        DefaultListSelectionModel m = new DefaultListSelectionModel();
        m.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        m.setLeadAnchorNotificationEnabled(false);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(26, 133, 538, 133);
        contentPane.add(scrollPane);
        scrollPane.setViewportView(listRN);
        listRN.setSelectionModel(m);
    //  listRN.setCellRenderer(new MyListCellRenderer());
        listRN.addMouseListener(mouseListener);
        JScrollPane scrollPane_1 = new JScrollPane();
        scrollPane_1.setBounds(26, 296, 538, 133);
        contentPane.add(scrollPane_1);



        scrollPane_1.setViewportView(listPL);
        listPL.setSelectionModel(m);
    //  listPL.setCellRenderer(new MyListCellRenderer());
        JButton btnNewButton = new JButton("Load");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                RN.add("Ivan");
                RN.add("Gaga");
                RN.add("Dragan");
                for(int i=0;i<RN.size();i++){
                    modelRN.addElement(RN.get(i));
                }

            }
        });
        btnNewButton.setBounds(386, 58, 89, 23);
        contentPane.add(btnNewButton);
    }

    MouseListener mouseListener = new MouseAdapter() {
         public void mouseClicked(MouseEvent e) {
         String d = null;

             if (e.getClickCount() == 1) {

                 int index = listRN.locationToIndex(e.getPoint());
                 System.out.println("clicked on Item " + index);

                  d = listRN.getSelectedValue();

                 modelPL.addElement(d);
                 }

              }


     };


     DefaultListModel<String> modelRN = new DefaultListModel<String>();

     DefaultListModel<String> modelPL = new DefaultListModel<String>();

     JList<String> listRN = new JList<String>(modelRN); 

     JList<String> listPL = new JList<String>(modelPL);

}

这是一个简单的例子。 单击“加载”按钮,并将字符串添加到第一个JList。 单击该JList中的字符串,然后将其加载到第二个JList中,因此没什么大不了的。 我的问题是之后的JLists行为...当我单击Jlist中的选择项时,它会将字符串加载到第二个Jlist中,但是突出显示的选择会跳到另一个String ...加上当我单击字符串时在第二个Jlist中,它与第一个Jlist连接。

我了解JList行为的根本缺陷是什么?

listPL和listRN不应具有相同的ListSelectionModel,当您在第一个列表中选择一个项目时,它会添加到第二个列表中,并且其中的所选项目也会更改,因此第一个列表中的所选项目也会更改,因为它们具有相同的ListSelectionModel 。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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