簡體   English   中英

使用Swing將對象從一個ArrayList移動​​到另一個ArrayList

[英]Moving objects from one ArrayList to another with Swing

我有一個包含多個對象的數組列表,這些對象顯示在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));
    }
}

這是第一個將我的所有項目添加到Array中的ArrayList。

JButton button = new JButton(">>");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        button.setBounds(333, 180, 59, 25);
        contentPane.add(button);

這是我需要使用動作監聽器的按鈕。 但是我不確定將什么放入動作監聽器中。 我還沒有第二個陣列,因為我不知道如何設置它,所以我可以動態地添加對象。

如果我以一種奇怪的方式解決這個問題,那么我願意接受建議,記住我是新手,所以我可能會用一個長篇大論的方法來解決這個問題。

這是你在找什么?

    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

我有一個包含多個對象的數組列表,這些對象顯示在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基礎知識。 在上一個問題中,您還獲得了本教程的鏈接。 我們不應該繼續重復自己。 基礎是由你來做閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM