java - java - 如何从Java中的JComboBox中获取所选项目并将其与字符串进行比较?
问题描述
For my homework assignment I need to add 2 onto the total only if the combobox value that is selected is "deep dish"
'我努力了'
thickness.getSelectedItem().contentEquals("deep dish")
{
total += 2.00;
}
我得到的错误说 contentEquals 没有为该类型对象定义,我不知道正确的方法。为了清楚起见,
String[] choices = {"thin","original","deep dish"};
thickness = new JComboBox(choices);
解决方案
因为 JComboBox 是泛型类型。您使用的构造函数是 Java 5 之前的样式。意味着您不会在编译时获得泛型提供的类型检查。我的建议是使用 IDE,它会突出显示编辑器中的一些明显错误。创建 JComboBox 的正确方法是:
JComboBox<String> thickness = new JComboBox<String>(choices);
你看,thickness.getSelectedItem()
现在将返回一个字符串。
编辑
我只是往里看javax.swing.JComboBox.java
,他们忽略了方法的通用类型信息getSelectedItem()
:
public Object getSelectedItem() {
return dataModel.getSelectedItem();
}
您有两个选择:1)继续使用contentEquals
type方法String
,但在代码中显式进行类型转换:
String selectedItem = (String) myComboBox.getSelectedItem();
if (selectedItem.contentEquals("Hello world!")) {
...
}
equals
这个选项更简单,并且依赖于 type 的方法对于 typeObject
是多态的这一事实,String
您可以安全地调用它。一个通用的模式是在一个常量字符串上调用它(以避免NullPointerException
):
if ("Hello Wolrd!".equals(myComboBox.getSelectedItem())) {
...
}
推荐阅读
- django - Django 从 UDP 接收数据并存储在 DB 中,前提是来自 websockets 的条件设置为 true
- excel - 表字段类型和长度矛盾(?) Timestamp(6)WithLocalTimeZone and Length=11
- python - Python - ValueError:解包的值太多(预期为 2)二维数组
- javascript - Angular 6 - Rxjs 订阅 QueryList 更改中的最后一个事件?
- php - Zoho API-V2 添加 Attactmetn URL
- c# - GetString(IStringLocalizer, String, Object[]) returns null when Unit-Testing
- webpack - Webpack 在浏览器中加载原生 ES6 模块并绑定后备
- node.js - How to correctly make multiple MySQL calls in a single request with Node.js, Express.js, MySQL2, and Promises
- web-component - A-Frame Web 组件兼容性
- java - Use the Mysql ClusterJ jar file to connect to NDB cluster