gpt4 book ai didi

java - 使用 AbstractListModel 通过添加/删除按钮在 2 个 JList 之间移动所选项目

转载 作者:行者123 更新时间:2023-12-02 04:58:11 27 4
gpt4 key购买 nike

我是编程新手。看来我研究得越多,我自己就越困惑,我不得不过度思考需要做什么。抽象列表模型是使 Jlist 正常工作所需要的。我需要知道什么是对/错。如果需要使用 getselectedvalues(),我该把它放在哪里?

JList Left_list = new JList();
Left_list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
}
});
Left_list.setFont(new Font("Tahoma", Font.PLAIN, 14));
Left_list.setModel(new AbstractListModel() {
String[] values = new String[] {"Case", "Motherboard", "CPU", "RAM", "GPU", "HDD", "PSU"};
public int getSize() {
return values.length;
}
public Object getElementAt(int index) {
return values[index];
}
});
Left_list.setBorder(new LineBorder(new Color(0, 0, 0), 2, true));
Left_list.setBounds(10, 11, 146, 218);
frame.getContentPane().add(Left_list);

JList Right_list = new JList();
Right_list.setModel(new AbstractListModel() {
String[] values = new String[] {};
public int getSize() {
return values.length;
}
public Object getElementAt(int index) {
return values[index];
}
});
Right_list.setBorder(new LineBorder(new Color(0, 0, 0), 2, true));
Right_list.setBounds(278, 16, 146, 213);
frame.getContentPane().add(Right_list);

JButton btnNewButton = new JButton("Add>>");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
btnNewButton.setBounds(166, 91, 102, 23);
frame.getContentPane().add(btnNewButton);

JButton btnNewButton_1 = new JButton("<<Remove");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
btnNewButton_1.setBounds(166, 125, 102, 23);
frame.getContentPane().add(btnNewButton_1);

最佳答案

我建议使用 DefaultListModel相反,因为它提供了突变 ListModel 的能力

DefaultListModel<String> model = new DefaultListModel<>();
for (String item : new String[] {"Case", "Motherboard", "CPU", "RAM", "GPU", "HDD", "PSU"}) {
model.addElement(item);
}
JList<String> Left_list= new JList<>();
Left_list.setModel(model);
//...

JList<String> Right_list = new JList<>(new DefaultListModel<String>());
//...

btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
List<String> selected = Left_list.getSelectedValuesList();
DefaultListModel<String> left = Left_list.getModel();
DefaultListModel<String> right = Right_list.getModel();
for (String item : selected) {
left.removeElement(item);
right.addElement(item);
}
}
});
//...
JButton btnNewButton_1 = new JButton("<<Remove");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
List<String> selected = Right_list.getSelectedValuesList();
DefaultListModel<String> left = Left_list.getModel();
DefaultListModel<String> right = Right_list.getModel();
for (String item : selected) {
right.removeElement(item);
left.addElement(item);
}
}
});

您可能需要创建Left_listRight_list实例字段的顺序为ActionListener来访问它们。

在编写示例时,我认为编写一个简单的方法很容易,可以将数据从一个列表移动到另一个列表,例如 protected void move(List<String> items, DefaultListModel from, DefaultListModel to) ,这意味着您可以简单地使用 move(Left_list.getSelectedValuesList(), Left_list.getModel(), Right_list.getModel())move(Right_list.getSelectedValuesList(), Right_list.getModel(), Left_list.getModel())移动内容并减少代码重复...

JList s 确实应该显示在 JScrollPane 中s,这允许列表比屏幕上的可用空间更长/更宽

看看

...了解更多详情

关于java - 使用 AbstractListModel 通过添加/删除按钮在 2 个 JList 之间移动所选项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28554376/

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