gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:14:15 27 4
gpt4 key购买 nike

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

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 中,所以没什么大不了的。我的问题是之后 JList 的行为...当我单击 Jlist 中的一个选择时,它会将字符串加载到第二个 Jlist,但突出显示的选择会跳转到另一个字符串...加上当我单击一个字符串时在第二个 Jlist 中,它连接到第一个 Jlist。

我在理解 JList 行为方面的根本缺陷是什么?

最佳答案

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

关于java - 一个 JList 触发向另一个 JList 添加数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27103118/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com