2016-04-12 5 views
1

複数のオブジェクトを含む配列リストがあり、これはJListパネルに表示されます。オブジェクトを選択したいのですが、ボタンを押すと、選択した項目が別のArrayListに追加されます。これも2番目のJListに表示されます。Swingを使用してあるArrayListから別の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); 

は、私はアクションリスナーを使用する必要があるボタンです。しかし、私は確信していません何をアクションリスナーに入れます。私はまた、それを設定する方法がわからないので、まだ2番目の配列を持っていないので、私は動的にオブジェクトを追加することができます。

私は奇妙なやり方でこのことをやっていますが、私は提案に門戸を開いています。私は新しいことを覚えています。

+1

あなたのコードは完全ではありません。あなたのコードであなたの別の 'Arraylist'はどこに定義されていますか? – STaefi

+0

私が示したArrayList、または私がまだ作っていないArrayListについて話していますか? –

+0

最初のJListと2番目の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に追加されます。これも2番目のJListに表示されます。

いいえあなたのアプローチはすべて間違っています。あなたはArrayListを扱うべきではありません。 SwingはModel-View-Controllerデザインを使用します。

基本的には、すべてのデータがモデルに表示されます。ビューはモデルにデータを表示します。あなたの場合、JListにはListModelに保存されているデータが表示されます。

そうするJListを作成するための基本的なコードは次のようになります。

listModel = new DefaultListModel(); 
listModel.addElement(new MenuItem("Coca Cola", "Drink", 3.00f, 38)); 
... 
list = new JList(listModel); 

ArrayListのための必要はありません。その後、データを変更するときはいつでもモデルを更新します。

スイングチュートリアルHow to Use ListsにあるListDemoの例をダウンロードして再生してください。

デモでは、ボタンを押したときにモデルにアイテムを動的に追加する方法、およびボタンをクリックしたときにモデルからアイテムを削除する方法を示します。したがって、両方のボタンのコンセプトを単一のボタンに適用し、あるJListから別のJListに項目を移動するロジックがあります。

覚えているので、私は長い間巻き込まれた方法でそれについて行くかもしれない新しいです。

すべてのSwingの基本について学ぶために、Swingチュートリアルへのリンクを用意してください。あなたは最後の質問でこのチュートリアルへのリンクも与えられました。私たちは自分自身を繰り返し続ける必要はありません。基本的には、読書をするのはあなた次第です。

関連する問題