2013-03-31 50 views
0

我的程序基於API。我得到一個JList和一個有一些名字的模型。和一個selectListener獲取選擇的項目和一個按鈕發送該項目到另一個窗口有另一個這裏是我的第一個列表:ActionListener無法通過按鈕將數據從JList移動​​到其他JList

第一個列表(窗口),並將項目發送到另一個列表。

final DefaultListModel<String> Names = new DefaultListModel<String>(); 
final JList<MyAPI> Places = new JList(Names); 

private JList<MyAPI> locList; 
private DefaultListModel<MyAPI> favourites; 

    public AddLocation(JList<MyAPI> locList, DefaultListModel<MyAPI> favourites){ 
     this.locList = locList; 
     this.favourites = favourites; 
} 


addThis.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e) { 
    Object chose = Places.getSelectedValue(); 
    favourites.addElement((MyAPI) chose); // error in this line 
       } 
      }); 

這是選擇的項目添加到這裏的另一個窗口:

final DefaultListModel<MyAPI> favourites; 
final JList<MyAPI> locList; 

favourites = new DefaultListModel<MyAPI>(); 
locList = new JList<MyAPI>(favourites); 

所以現在這兩個窗口載荷和第一列表負載,其在它的名字。但是當我按下按鈕添加此,它提供了錯誤,並指出這條線:

favourites.addElement((MyAPI) chose); 

我該如何解決呢?

回答

1

你的第一個模型是這樣定義的:

final DefaultListModel<String> Names ...; 

你的第二個模式是這樣定義的:

final DefaultListModel<MyAPI> favourites; 

你的第一個列表模式conains String情況下,你的第二個模型包含MyAPI實例。所以,當執行到這行:

favourites.addElement((MyAPI) chose); 

你正在試圖使MyAPIString,這是不行的,還可能需要ClassCastException被拋出的。

要麼你需要聲明第二列表模型final DefaultListModel<String> favourites;或創建基於選定StringMyAPI實例(new MyAPI(chose)?)。