我一直在努力将数据库中的列中的int值转换为组合框,因此一旦选择,当我设计此解决方案时,值将在文本框中打印出来:
private void jComboBoxSNActionPerformed(java.awt.event.ActionEvent evt) {
JComboBox jComboBoxSN = (JComboBox) evt.getSource();
int s_n = (Integer) jComboBoxSN.getSelectedItem();
System.out.println("Number: " + s_n);
}
我想知道,这种可接受的编程还是错误的编程?
答案 0 :(得分:3)
除非您确定您的组合框不能包含空值(如果您正在从数据库加载值,这是不确定的),那么您显示的代码并不安全。这一行:
int s_n = (Integer) jComboBoxSN.getSelectedItem();
如果在null项上执行,将导致NullPointerException。 (自动取消装箱空原始包装器是NullPointerException)。
另一种方法是在将Integer转换为int之前检查null:
Integer i = (Integer)jComboBoxSN.getSelectedItem();
if (i != null) {
int s_n = i; // or s_n = i.intValue();
}
但是,我认为这样的事情会更合适:
final JTextArea text = new JTextArea();
JComboBox combo = new JComboBox();
combo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
// assume single selection
int i = (Integer)e.getItemSelectable().getSelectedObjects()[0];
text.setText("Selected [" + i + "]");
}
}
});
答案 1 :(得分:1)
如果您在组合框中存储的内容是Integer
,那么这是可以接受的。否则就不是。
您将使用getSelectedItem()
获取您在所选位置添加的对象。如果您想要组合框中该项目的索引,请使用getSelectedIndex()
(返回一个int)。
(注意:如果你不知道放在那里的物品类别,就很难猜出你真正想要的东西。)