2015-02-12 78 views
0

我正在使用JComboBox将Integer值作为输入。告诉我哪些功能可用于从组合框中获取值。在Java中从JComboBox获取整数值

我的combox将有这些值。

cb1=new JComboBox(); 
     for(int i=1;i<=31;i++) 
    { 
     if(i<10) 
     { 
     cb1.addItem("0"+i); 
     } 
     else 
     { 
     cb1.addItem(i); 
     } 
    } 

我用这个函数来得到值。

int c=(Integer)cb1.getSelectedItem(); 

但它在我的代码中显示此错误。

我的代码如下。

Discharge_screen() 
{ 
    l = new JLabel("Discharge screen"); 
    l.setHorizontalAlignment(SwingConstants.CENTER); 
    l.setVerticalAlignment(SwingConstants.CENTER); 
    l.setBackground(Color.GRAY); 
    l.setOpaque(true); 
    l1 = new JLabel("Discharge Destination"); 
    l1.setBackground(Color.LIGHT_GRAY); 
    l1.setOpaque(true); 
    l2 = new JLabel("Discharge outcome"); 
    l2.setBackground(Color.LIGHT_GRAY); 
    l2.setOpaque(true); 
    l3 = new JLabel("Discharge date"); 
    l3.setBackground(Color.LIGHT_GRAY); 
    l3.setOpaque(true); 
    cb1=new JComboBox(); 
    for(i=1;i<=31;i++) 
    { 
     if(i<10) 
     { 
     cb1.addItem("0"+i); 
     } 
     else 
     { 
     cb1.addItem(i); 
     } 
    } 
    cb2=new JComboBox(); 
    for(i=1;i<=12;i++) 
    { 
     if(i<10) 
     { 
     cb2.addItem("0"+i); 
     } 
     else 
     { 
     cb2.addItem(i); 
     } 
    } 
    cb3=new JComboBox(); 
    for(i=1950;i<=2015;i++) 
    { 
     cb3.addItem(i); 
    } 


    b1=new JButton("Submit"); 
    b2=new JButton("Back to home"); 

    t1=new JTextField(); 
    t2=new JTextField(); 


    panel = new JPanel(); 
    panel.setLayout(null); 

    l.setBounds(100,40,225,35); 

    l1.setBounds(100,100,100,25); 
    t1.setBounds(205,100,125,25); 

    l2.setBounds(100,130,100,25); 
    t2.setBounds(205,130,125,25); 

    l3.setBounds(100,160,100,25); 
    cb1.setBounds(205,160,50,25); 
    cb2.setBounds(260,160,50,25); 
    cb3.setBounds(315,160,75,25); 


    b1.setBounds(100,190,100,25); 
    b2.setBounds(205,190,125,25); 

    panel.add(l); 
    panel.add(l1); 
    panel.add(t1); 
    panel.add(l2); 
    panel.add(t2); 
    panel.add(l3); 
    panel.add(cb1); 
    panel.add(cb2); 
    panel.add(cb3);  
    panel.add(b1); 
    panel.add(b2); 

    add(panel,BorderLayout.CENTER); 
    b1.addActionListener(this); 
    b2.addActionListener(this); 
    setTitle("Discharge screen"); 
    setSize(450,400); 
} 

@Override 
public void actionPerformed(ActionEvent event) 
{ 
    // TODO Auto-generated method stub 


    if(event.getSource()==b1) 
    { 
     Connection con = null; 
     Statement stmt=null; 
     ResultSet rs=null; 
     String a,b; 
     int c,d,e; 


     try 
     { 

      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      String accessFileName = "C:\\Users\\dinesh\\Documents\\employee"; 
      String connURL="jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+accessFileName+".accdb"; 
      con = DriverManager.getConnection(connURL, "",""); 
      stmt = con.createStatement(); 

     a=t1.getText(); 
     b=t2.getText(); 
     c=(Integer) cb1.getSelectedItem(); 
     System.out.println(c); 
     d=(Integer) cb2.getSelectedItem(); 
     e=(Integer) cb3.getSelectedItem(); 

      stmt.executeUpdate("insert into discharge_details (dis_dest,dis_outcome,dis_date) values ('"+a+"','"+b+"','"+c+":"+d+":"+e+"')");// execute query in table student 
      System.out.println("1"); 
      rs = stmt.getResultSet(); 

      stmt.close(); 
      con.close(); 
      } 
      catch (Exception err) { 
       System.out.println("ERROR: " + err); 
      } 
    } 
    } 
} 

此错误在执行后显示。

ERROR: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 

回答

2

在此基础上...

cb1=new JComboBox(); 
for(int i=1;i<=31;i++) 
{ 
    if(i<10) 
    { 
     cb1.addItem("0"+i); 
    } 
    else 
    { 
     cb1.addItem(i); 
    } 
} 

你有值的鱼龙混杂,低于10值,它们是String,上面,他们是int小号...

现在,通常我会推荐使用ListCellRenderer来改变这些值的外观,但在您的情况下,将它们全部制成可能会更简单String s

cb1=new JComboBox(); 
for(int i=1;i<=31;i++) 
{ 
    if(i<10) 
    { 
     cb1.addItem("0"+i); 
    } 
    else 
    { 
     cb1.addItem(Integer.toString(i)); 
    } 
} 

然后,当你需要的价值,你需要做这样的事情......

String text = (String)cb1.getSelectedItem(); 
int value = Integer.parseInt(text); 

或者(而且可能更正确),你可以使用一个ListCellRenderer,这样可以让你改变当JComboBox,像中呈现的值看的方式......

public class NumberListCellEditor extends DefaultListCellRenderer { 

    @Override 
    public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
     if (value instanceof Integer) { 

      int number = (Integer) value; 
      if (number < 10) { 
       value = "0" + number; 
      } 

     } 
     super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 
     return this; 
    } 

} 

例如...

然后,你可以简单地做这样的事情......

JComboBox cb = new JComboBox<Integer>(); 
cb.setRenderer(new NumberListCellEditor()); 
for (int i = 1; i <= 31; i++) { 
    cb.addItem(i); 
} 

然后就不需要在乎值铸造String第一

int value = (Integer)cb1.getSelectedItem(); 

看看

更多细节

+0

感谢FRND ..ü解决我的问题。 – dheena 2015-02-12 05:57:29