为什么.setText()会导致ClassCastException?

时间:2016-10-28 04:56:21

标签: java swing jtable jtextfield

为什么此代码抛出ClassCastException。当我尝试将JTable的所选行值(ie.showItem)设置为TextField(ie.itemCode)时。异常为Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

 showItem = new JTable();
        showItem.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                int rowCount=showItem.getRowCount();
                if(rowCount>=1){
                    //Why it is throwing ClassCastException
                     itemCode.setText((String)showItem.getValueAt(showItem.getSelectedRow(), 0));

                }
            }
        });

3 个答案:

答案 0 :(得分:1)

首先,不要尝试在一个语句中编写所有代码。使用多个语句更容易调试:

itemCode.setText((String)showItem.getValueAt(showItem.getSelectedRow(), 0));

可以很容易地写成:

Object value = showItem.getValueAt(rowCount, 0);
itemCode.setText( value.toString() );

注意,由于您有一个包含该值的变量,因此无需再调用两次getSelectedRow()方法。

然后您可以随时添加一些调试代码,如:

Object value = showItem.getValueAt(rowCount, 0);
System.out.println( value.getClass() );

查看您的表格在该单元格中的对象类型。

答案 1 :(得分:0)

也许你应该检查一下。

How do I convert from int to String?

代表

itemCode.setText((String)showItem.getValueAt(showItem.getSelectedRow(), 0));

答案 2 :(得分:0)

您无法将Integer转换为String,因为Integer 不是 String,即{{} 1}}不是Integer的子类。但是,您可以将String传递给Integer,因为所有String都有Object方法。

toString()

我希望我有所帮助。

祝你有个愉快的一天。 :)