2016-09-30 274 views
2

我只是新的学习OOP抱歉这个基本的职位。我不知道为什么当我试图获得我的JComboBox中所选项目的值时,它返回null。为什么getSelectedItem返回null?

public class AddEmployee extends javax.swing.JInternalFrame{ 
    public AddEmployee() 
    { 
    initComponents(); 
    this.setSize(1100,500); 
    setMonths(); 
    setJComboBoxProperties(); 
    check(); 
    } 

    private void setMonths() 
    { 
     String[] monthsObj = {"January", "February", "March", "April", "May", "June", "July", 
    "August", "September", "October", "November", "December"}; 

     DefaultComboBoxModel monthsModel = new DefaultComboBoxModel(monthsObj); 

     cbMonths.setModel((ComboBoxModel)monthsModel); 

    } 

    private void setJComboBoxProperties() 
    { 
     cbMonths.setSelectedIndex(-1); 
    } 

    private String check() 
    { 
     String cb = (String)cbMonths.getSelectedItem(); 
     System.out.println(cb); 
     return cb; 
    } 

} 

我投了String cb所以它不会给我一个null。但我试图检查出选定的项目,但它给了我空。

+3

cbMonth在哪里申报?在哪里选择一个条目? – Jens

+0

@Jens Btw这是拖放。这就是为什么我没有创建'JComboBox'的实例:) –

+0

拖放?你必须声明cbMounth。 – Jens

回答

2

初始化Combobox后调用setSelectedItem。请参阅documentation

DefaultComboBoxModel monthsModel = new DefaultComboBoxModel(monthsObj); 
    monthsModel.setSelectedItem('September'); 
+0

不,我只是想检查用户选择哪个项目。 –

+2

@JohnFrancis如果你得到null,用户不会选择任何条目。请参阅我提供的文档'组合框的值或为空的选择。' – Jens

+0

检查'getSelectedIndex()'。如果没有选择,应该返回'-1'。 – dit

2

您打电话给cbMonths.setSelectedIndex(-1);。根据documentation,这不会将项目(null)设置为选定项目。

直到用户更改选择,getSelectedItem()将始终返回null。这是正确的,记录在案的行为。

+0

我试图删除'setSelectedIndex(-1);'和第一个元素是一月吧?它总是打印第一个元素,但是当我选择其他元素时,它不打印任何东西。我该如何解决这个问题? –

+0

您需要添加一个侦听器,以响应用户更改选择时触发的ActionEvent。看到这个问题:http://stackoverflow.com/questions/58939/jcombobox-selection-change-listener – megaflop

+0

起初我以为我不会用听众。这实际上是JComboBox的行为吗?只是问:D –