【问题标题】:How to get the selected item in JList to and use casting如何获取 JList 中的选定项目并使用强制转换
【发布时间】:2013-03-30 20:27:58
【问题描述】:

在我的程序的一部分中,我有一个 JList,它有一个位置列表,我得到一个 API,它应该使用来自 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 时才使用它。

【问题讨论】:

标签: java swing casting jlist getselection


【解决方案1】:

你有两个选择。

如果您使用的是 Java 7,并且您已使用正确的泛型签名创建了 JListListModel。假设类似...

JList<WeatherAPI> locList;

和一个类似的列表模型声明,你可以使用

WeatherAPI chosen =  locList.getSelectedValue();

否则你需要转换结果

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

有点老派,我通常会在演员之前检查结果

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

【讨论】:

  • 感谢您的回复,我认为铸造工作 WeatherAPI chosen = (WeatherAPI)locList.getSelectedValue(); 但在编译时给出错误,并指向 API 使用的行 chosen List&lt;ForecastForOneDay&gt; forecast = FetchWeatherForecast.getWeatherForecast(chosen);
  • 顺便说一句,我有一个已经完成这个程序的人的帮助,但我不知道这到底是什么意思:你有一个你用来放置信息的地方的列表进入你的 locList?如果这样做,当用户单击 JList 中的某些内容时,您可以使用 locList.getSelectedIndex() 作为stations.get 调用的参数,并且您得到的答案可以放在 selected 中。
  • 你已经声明你的列表返回使用 ForecastForOneDay 对象,你期望它如何神奇地变成一个 WeatherAPI 对象?
  • ermm 我不知道:/ 我只是尝试按照 API 提供的示例进行操作。程序使用 firstMatch 但我必须用所选项目替换它。所以我现在真的卡住了。
【解决方案2】:

尝试使用getSelectedValue():

WeatherAPI chosen =  locList.getSelectedValue();

【讨论】:

  • 假设 OP 使用的是 Java 7,并且 JList 已使用正确的泛型签名创建
  • 您的列表和列表模型必须能够包含 WeatherAPI 对象,否则您可以期望的唯一结果是字符串
  • @AlexJj 我不会仅仅因为您使用 Eclipse 就假设您自动使用 Java 7 ;)
  • 这样做:DefaultListModel&lt;WeatherAPI&gt; myList = new DefaultListModel&lt;WeatherAPI&gt;(); JList&lt;WeatherAPI&gt; locList = new JList&lt;WeatherAPI&gt;(myList);
  • @AlexJj 您要么需要这样做,要么将作为所选项目返回的期望更改为 String 对象。
猜你喜欢
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
相关资源
最近更新 更多