我的程序是基于API的。我有一个JList和一个有一些名字的模型。还有一个selectListener来获取被选中的项目和一个按钮来将该项目发送到另一个有另一个窗口的窗口这是我的第一个列表:
第一个列表(窗口)并将项目发送到另一个列表
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);
我怎么解决它?
您的第一个模型是这样定义的:
final DefaultListModel<String> Names ...;
第二个模型定义如下:
final DefaultListModel<MyAPI> favourites;
您的第一个列表模型包含String
实例,您的第二个模型包含MyAPI
实例。所以当这行执行时:
favourites.addElement((MyAPI) chose);
您正在尝试从String
中制作MyAPI
,这不起作用,可能会抛出ClassCastException
。
您要么需要将第二个列表模型声明为final DefaultListModel<String> favourites;
,要么基于所选的String
(new MyAPI(chose)
?)创建MyAPI
的实例。