我有一个包含多个对象的数组列表,这些对象显示在JList面板中。我想选择一个对象,当我按下一个按钮时,它会将所选项添加到另一个ArrayList。那个也将在第二个JList上显示。
下面的代码显示了我到目前为止所完成的工作:
import java.util.ArrayList;
/**
*
* ArrayList for the class, will hold all food items
* @author Jonathan
* @version 1.0
*
*/
public class RestaurantArrayList extends MenuItem
{
public RestaurantArrayList(String nameFood, String typeFood, float foodPrice, int caloryCount) {
super(nameFood, typeFood, foodPrice, caloryCount);
}
public static final ArrayList<MenuItem> items;
static {
items = new ArrayList<>();
items.add(new MenuItem("Coca Cola", "Drink", 3.00f, 38));
items.add(new MenuItem("Fanta Orange", "Drink", 3.00f, 31 ));
items.add(new MenuItem("Glass of Red Wine", "Drink", 5.00f, 85));
items.add(new MenuItem("Glass of White Wine", "Drink", 5.00f, 82));
items.add(new MenuItem("Carling", "Drink", 3.50f, 189));
items.add(new MenuItem("Fosters", "Drink", 3.50f, 378));
items.add(new MenuItem("Water", "Drink", 0.00f, 0));
items.add(new MenuItem("Breads", "Starter", 5.00f, 150));
items.add(new MenuItem("Cold Meat", "Starter", 5.00f, 150));
items.add(new MenuItem("Potato Skins and Barbeque Sauce", "Starter", 5.00f, 500));
items.add(new MenuItem("Cold Meat", "Starter", 5.00f, 400));
items.add(new MenuItem("Garlic Bread and Cheese", "Starter", 4.50f, 450));
items.add(new MenuItem("Steak", "Main", 13.50f, 750));
items.add(new MenuItem("Cheese and Bacon Burger", "Main", 8.00f, 850));
items.add(new MenuItem("Spaghetti Cabonara", "Main", 7.00f, 675));
items.add(new MenuItem("Steak", "Main", 13.50f, 378));
items.add(new MenuItem("Seafood Paella", "Main", 10.00f, 850));
}
}
这是第一个将我的所有项目添加到数组中的ArrayList。
JButton button = new JButton(">>");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
button.setBounds(333, 180, 59, 25);
contentPane.add(button);
这是我需要使用动作监听器的按钮。但我不确定将放入动作侦听器中。我还没有第二个数组,因为我不知道如何设置它,所以我可以动态地添加对象。
如果我以一种奇怪的方式解决这个问题,那么我愿意接受建议,记住我是新手,所以我可能会用冗长的方法来解决这个问题。
答案 0 :(得分:0)
这是你要找的吗?
final JList<MenuItem> firstJList = new JList<MenuItem>();
DefaultListModel<MenuItem> firstModel = new DefaultListModel<MenuItem>();
for (MenuItem item : RestaurantArrayList.items) {
firstModel.addElement(item);
}
firstJList.setModel(firstModel);
final JList<MenuItem> secondJList = new JList<MenuItem>();
secondJList.setModel(new DefaultListModel<MenuItem>());
JButton button = new JButton(">>");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (firstJList.isSelectionEmpty())
return;
List<MenuItem> selection = firstJList.getSelectedValuesList();
DefaultListModel<MenuItem> model = (DefaultListModel<MenuItem>) secondJList.getModel();
for (MenuItem selected : selection) {
if (!model.contains(selected))
model.addElement(selected);
}
}
});
基本上,上面代码的作用是它从第一个列表firstJList
获取选择列表,并在执行按钮操作时将其添加到secondJList
。
答案 1 :(得分:0)
我有一个包含多个对象的数组列表,这些对象显示在JList面板中。我想选择一个对象,当我按下一个按钮时,它会将所选项添加到另一个ArrayList。那个也将在第二个JList上显示。
没有。你的方法都错了。你不应该处理ArrayList。 Swing使用模型 - 视图 - 控制器设计。
基本上这意味着所有数据都显示在模型中。然后,视图将显示模型中的数据。在您的情况下,JList
将显示存储在ListModel
。
因此,创建JList的基本代码是:
listModel = new DefaultListModel();
listModel.addElement( new MenuItem("Coca Cola", "Drink", 3.00f, 38) );
...
list = new JList(listModel);
不需要ArrayList。然后,只要您想更改数据,就可以更新模型。
首先,下载并播放Swing教程How to Use Lists中的ListDemo
示例。
该演示向您展示了如何在按下按钮时动态地将项目添加到模型,以及如何在单击按钮时从模型中删除项目。因此,将两个按钮的概念应用到单个按钮中,您就可以将项目从一个JList移动到另一个JList。
记住我是新人,所以我可能会用冗长的方法来解决这个问题。
保持链接到Swing教程,以便了解所有Swing基础知识。在上一个问题中,您还获得了本教程的链接。我们不应该继续重复自己。有基础知识由你来完成阅读。