2013-03-30 57 views
1

在我的程序的一部分中,我有一个JList它有一个位置列表,我有一个API,它应该使用JList中的一个项目并打印走出那个地方的天气。所以现在我不能这样做,因为我用如何获取JList中选择的项目并使用铸造

WeatherAPI chosen = locList.getSelectedIndex(); 

,但有一个错误:类型不匹配:不能从int到WeatherAPI转换。

这是工作的API的例子:

LinkedList<WeatherAPI> stations = FetchForecast.findStationsNearTo("cityname"); 
for (WeatherAPI station : stations) { 
    System.out.println(station); 
} 
WeatherAPI firstMatch = stations.getFirst(); 

,所以我不希望得到的第一个选项,我想用户所选择的位置。这完全是关于铸造。 我也试过这个,没有工作。

WeatherAPI stations; 
WeatherAPI firstMatch = stations.get(locList.getSelectedIndex()); 

我得到了代码的其余部分,它使用了“firstMatch,但只使用它时,它的类型是WeatherAPI

+1

尝试.getSelectedValues()? –

+0

类型不匹配:无法从Object转换为WeatherAPI –

+0

Crosspost:http://www.coderanch.com/t/608471/GUI/java/selected-item-JList-casting。为什么你在浪费每个人时间发布一个已经回答的问题? – camickr

回答

2

尝试使用getSelectedValue()

WeatherAPI chosen = locList.getSelectedValue(); 
+2

假设OP使用Java 7并且使用正确的泛型签名创建了JList – MadProgrammer

+0

没有工作,错误:**类型不匹配:无法从Object转换为WeatherAPI ** :(以下是我如何制作JList。 DefaultListModel myList = new DefaultListModel (); JList locList = new JList(myList);'@MadProgrammer我的JList工作正常我可以添加和删除项目,是的,我使用Eclipse,所以它应该是Java 7已经 –

+4

Your列表和列表模型必须能够包含WeatherAPI对象,否则你可以期望得到的唯一结果是字符串 – MadProgrammer

5

你有两个选择

如果您使用的是Java 7,你已经创建了JList和0。使用正确的泛型签名。假设像...

JList<WeatherAPI> locList; 

而且类似的列表模型声明,你可以使用

WeatherAPI chosen = locList.getSelectedValue(); 

否则,你将需要转换的结果

WeatherAPI chosen = (WeatherAPI)locList.getSelectedValue(); 

已经有点老派,我通常会检查铸造前的结果

Object result = locList.getSelectedValue(); 
if (result instanceof WeatherAPI) { 
    WeatherAPI chosen = (WeatherAPI)result 
} 
+0

感谢您的回复,我认为该投射工作'WeatherAPI选择=(WeatherAPI)locList.getSelectedValue();'但在编译它给出和错误,并指向API使用**选择的行**'List 预测 \t \t = FetchWeatherForecast.getWeatherForecast(选择);' –

+0

顺便说一句,在这里我有一个已经完成这个程序的人的帮助,但我不知道这意味着什么:_你有一个站的列表你用来把信息放入你的locList中?如果这样做,当用户点击JList中的某些内容时,可以使用locList.getSelectedIndex()作为站点.get调用的参数,并且您得到的答案可以放在选择内._ –

+0

您已将您的列表声明为返回使用ForecastForOneDay对象,你如何期待它神奇地成为一个WeatherAPI对象? – MadProgrammer

相关问题