2016-04-12 73 views
1

我有一個包含多個對象的數組列表,這些列表顯示在JList面板中。我想選擇一個對象,當我按下按鈕時,它會將選定的項目添加到另一個ArrayList。那一個也會顯示在第二個JList上。使用Swing將對象從一個ArrayList移動​​到另一個

下面的代碼顯示到目前爲止,我所做的工作:

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); 

這是我需要使用動作偵聽器的按鈕。但我不確定什麼要放入動作偵聽器。我還沒有第二個數組,因爲我不知道如何設置它,所以我可以動態地添加對象。

如果我以一種奇怪的方式討論這個問題,那麼我願意接受建議,記住我是新人,所以我可能會用漫長的方法去解決這個問題。

+1

您的代碼不完整且不夠清晰。代碼中定義的另一個'Arraylist'在哪裏?請提供一個http://stackoverflow.com/help/mcve – STaefi

+0

我不確定你的意思,你是在談論我已經展示的ArrayList,還是我說過我還沒有做的那個? –

+0

請附上與填充第一個和第二個JList相關的代碼(您是否使用'DefaultListModel')? – Yazan

回答

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

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基礎知識。您在最後一個問題中也獲得了本教程的鏈接。我們不應該不斷重複自己。基本知識是由你來做閱讀。

相關問題