2013-10-07 32 views
0

我正在嘗試開發一個將在兩個JList之間移動選定數據的Java代碼,因爲getModel()方法不會返回DefaultListModel,並且顯式投射也不允許使用List.getModel()方法,是否可以將所選數據從一個移動到另一個JList,反之亦然。在兩個JList之間移動選定的數據

這裏是我想做...(「全部添加」和「刪除所有」按鈕,運作良好,我使用Arralist的是,精確的觀點,但我發現的解決方案選擇的數據,添加和刪除數據)

代碼的includig排序序列:

用於向左JList的」

lmLeft = new DefaultListModel(); 
lstLeft = new javax.swing.JList(); 
lstLeft.setModel(lmLeft); 

對於右JLis T:

lmRight = new DefaultListModel(); 
lstRight = new javax.swing.JList(); 
lstRight.setModel(lmRight); 

解決:我更換JList中與JTable中

注:我們不能投DefaultListModel到的GetList(),因爲它會返回AbstractListModel上。

謝謝大家的關注。

+3

你有什麼試過的?你面臨的問題是什麼?爲什麼getModel()不返回DefaultListModel,爲什麼顯式轉換不允許? –

+1

這是因爲您並沒有首先使用DefaultTableModel創建JList。無論如何,我不知道它與問題的關係如何。 Sinc似乎你還沒準備好詳細說明你的問題,我會投票結束。 –

+0

因爲我在這裏是新的,我不能夠添加圖像,否則我會添加詳細的說明... 和我創建了帶有DefaultTableModel的JList。 –

回答

1

您的解決方案應該是非常簡單的,如:

  1. 獲取從左側列表中所有選定的項目從左邊的列表
  2. 選取的項目新增至右側列表

並做全部添加和刪除所有這些應該沒有問題,很簡單。 JList類爲您提供執行上述所有操作的方法。

JList.getSelectedIndices()將返回已選擇的所有索引的int(int [])數組。所以你會瀏覽清單並將這些索引中的項目添加到你的清單中。

List<Object> myItemsForRightList = new ArrayList<Object>(); 
int[] selectedIndexes = jListLeft.getSelectedIndicies(); 
for(int i=0; i < selectedIndexes.length; i++) { 
     Object whatever = jListLeft.getElementAt(selectedIndexes[i]); 
     ((DefaultListModel)jListRight.getModel()).addElement(whatever); 
} 

我建議你還看什麼API所提供的@http://docs.oracle.com/javase/6/docs/api/javax/swing/JList.html

---編輯---
僅僅因爲未提供完整的源代碼,我重新張貼代碼以上用JDK 7記住

public static void main(String ... args) { 
     JFrame frame = new JFrame("Test"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     DefaultListModel<String> defaultListModel = new DefaultListModel<String>(); 
     defaultListModel.addElement("Bla bla bla"); 
     defaultListModel.addElement("Ble ble ble"); 
     defaultListModel.addElement("Blo blo blo"); 

     final JList<String> list = new JList<String>(); 
     list.setPreferredSize(new Dimension(400, 200)); 
     list.setModel(defaultListModel); 

     JButton button = new JButton("Add"); 
     button.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       ((DefaultListModel<String>)list.getModel()).addElement("New one added"); 
      } 
     }); 

     frame.setLayout(new BorderLayout(5, 5)); 
     frame.add(new JScrollPane(list), BorderLayout.NORTH); 
     frame.add(button, BorderLayout.SOUTH); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
+0

DefaultListModel強制轉換會在那裏拋出一個異常......我已經在我的問題中指定了。 –

+2

它不能因爲DefaultListModel實現了ListModel接口。此外,您並沒有顯示完整的代碼,所以沒有人可以真正運行,測試和體驗正在發生的事情。 –