Java 使用Swing将对象从一个ArrayList移动到另一个ArrayList

Java 使用Swing将对象从一个ArrayList移动到另一个ArrayList,java,arrays,swing,Java,Arrays,Swing,我有一个包含多个对象的数组列表,这些对象显示在JList面板中。我想选择一个对象,当我按下按钮时,它会将所选项目添加到另一个ArrayList。该列表也将显示在第二个JList上 下面的代码显示了我迄今为止所做的工作: import java.util.ArrayList; /** * * ArrayList for the class, will hold all food items * @author Jonathan * @version 1.0 * */ public

我有一个包含多个对象的数组列表,这些对象显示在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));
    }
}
这是我需要使用动作侦听器的按钮。但我不知道该把什么放在行动上。我还没有得到第二个数组,因为我不知道如何设置它,所以我可以动态地向其中添加对象


如果我用一种奇怪的方式来做这件事,那么我会接受建议,记住我是新手,所以我可能会用一种冗长的方法来做这件事。

这就是你想要的吗

    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);
            }
        }
    });
final JList firstJList=new JList();
DefaultListModel firstModel=新的DefaultListModel();
对于(菜单项:RestaurantArrayList.items){
第一个模型。附录(项目);
}
firstJList.setModel(firstModel);
最终JList secondJList=新JList();
secondJList.setModel(新的DefaultListModel());
JButton按钮=新JButton(“>>”);
addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
if(firstJList.isSelectionEmpty())
返回;
列表选择=firstJList.getSelectedValuesList();
DefaultListModel=(DefaultListModel)secondJList.getModel();
对于(选定菜单项:选择){
如果(!model.contains(选定))
模型.附加元素(选定);
}
}
});

因此,上面的代码基本上是从第一个列表
firstJList
中获取选择列表,并在执行按钮操作时将其添加到
secondJList

这就是您要查找的吗

    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);
            }
        }
    });
final JList firstJList=new JList();
DefaultListModel firstModel=新的DefaultListModel();
对于(菜单项:RestaurantArrayList.items){
第一个模型。附录(项目);
}
firstJList.setModel(firstModel);
最终JList secondJList=新JList();
secondJList.setModel(新的DefaultListModel());
JButton按钮=新JButton(“>>”);
addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
if(firstJList.isSelectionEmpty())
返回;
列表选择=firstJList.getSelectedValuesList();
DefaultListModel=(DefaultListModel)secondJList.getModel();
对于(选定菜单项:选择){
如果(!model.contains(选定))
模型.附加元素(选定);
}
}
});
因此,上面的代码基本上是从第一个列表
firstJList
中获取选择列表,并在执行按钮操作时将其添加到
secondJList

我有一个包含多个对象的数组列表,这些对象显示在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教程中的
ListDemo
示例

演示演示如何在按下按钮时向模型动态添加项目,以及如何在单击按钮时从模型中删除项目。因此,将两个按钮的概念应用到单个按钮中,您就有了将项目从一个JList移动到另一个JList的逻辑

记住我是新来的,所以我可能会用一种冗长的方法

保留一个指向Swing教程的链接,方便您学习所有Swing基础知识。在上一个问题中,您还获得了指向本教程的链接。我们不应该不断重复自己的话。基本知识就在那里,阅读由你决定

我有一个包含多个对象的数组列表,这些对象显示在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教程中的
ListDemo
示例

演示演示如何在按下按钮时向模型动态添加项目,以及如何在单击按钮时从模型中删除项目。因此,将两个按钮的概念应用到单个按钮中,您就有了将项目从一个JList移动到另一个JList的逻辑

记住我是新来的,所以我可能会用一种冗长的方法

保留一个指向Swing教程的链接,方便您学习所有Swing基础知识。在上一个问题中,您还获得了指向本教程的链接。我们不应该不断重复自己的话。基本的都有,这取决于你