无法将java.lang.Object转换为int

无法将java.lang.Object转换为int,java,swing,jtable,Java,Swing,Jtable,我从JTable下载号码时遇到问题。在Eclipse中,我有jre JavaSE 1.7,一切正常。我在IntelliJ IDEA中打开了我的项目,并选择了SDK java jdk 1.8 private int; public void tableEdit(final JTable table) { table.getModel().addTableModelListener(new TableModelListener() { @Override

我从JTable下载号码时遇到问题。在Eclipse中,我有jre JavaSE 1.7,一切正常。我在IntelliJ IDEA中打开了我的项目,并选择了SDK java jdk 1.8

private int;
public void tableEdit(final JTable table) {

        table.getModel().addTableModelListener(new TableModelListener() {
            @Override
            public void tableChanged(TableModelEvent e) {
                // TODO Auto-generated method stub
                if (table.getCellEditor() != null) {

                    int col = table.getSelectedColumn();
                    id =  (int)table.getValueAt(table.getSelectedRow(), 0); //ERROR
错误:

java: incompatible types: java.lang.Object cannot be converted to int
编辑:

新问题: JTable I有两个字段,ID和field2(combobox),从combobox中选择值后,它希望从ID字段中检索一个值,以便它们知道我需要更新哪一行

categoryBox.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent event) {
                if (newrow_flag == 0) {
                    JComboBox comboBox = (JComboBox) event.getSource();
                    Object item = event.getItem();
                    if (event.getStateChange() == ItemEvent.SELECTED
                            && box_flag_category > 0) {

                        Category selected_category = (Category) categoryBox
                                .getSelectedItem();

                        int rowid = Integer.getInteger(itemTable.getValueAt(
                                itemTable.getSelectedRow(), 0).toString()); //Error

                        id_category = selected_category.getId();


                        fireItemEvent(new ItemsEvent(rowid, "produkty", null,
                                null, null, id_category, id_company, "update"),
                                "box_category");

                    }
                    box_flag_category++;
                }
            }
        });
和错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at com.magazyn.view.View$9.itemStateChanged(View.java:659)
    at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1223)
    at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1280)
    at javax.swing.JComboBox.contentsChanged(JComboBox.java:1327)
    at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:118)
    at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:93)
    at javax.swing.JComboBox.setSelectedItem(JComboBox.java:576)
    at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:622)
    at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:834)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
    at java.awt.Component.processMouseEvent(Component.java:6527)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    [...]
错误指向此行:

int rowid = Integer.getInteger(itemTable.getValueAt(
                                itemTable.getSelectedRow(), 0).toString());

那么看看错误:

id =  (int)table.getValueAt(table.getSelectedRow(), 0);
java:不兼容的类型:java.lang.Object无法转换为int

然后看抛出错误的行:

id =  (int)table.getValueAt(table.getSelectedRow(), 0);
现在您可以看到,您正在尝试将
对象
强制转换为
int
。这是不允许的。所以你需要更具创造性:

int id = Integer.parseInt(table.getValueAt(table.getSelectedRow(), 0).toString()); 

参见classJtable

public Object getValueAt(int row, int column) {
        return getModel().getValueAt(convertRowIndexToModel(row),
                                     convertColumnIndexToModel(column));
    }
方法的返回类型为对象

使用
Integer.parseInt()

我从JTable下载号码时遇到问题

  • 将整数值直接放入,以避免在运行时进行任何分析

  • JTable在其XxxTableModel中指定

  • (对于
    DefaultTableModel
    不需要),然后覆盖


编辑

关于:


@克里斯托弗,当我从组合框中选择值时,我得到一个错误异常 在线程“AWT-EventQueue-0”java.lang.ClassCastException中: 无法在处将java.lang.Integer转换为java.lang.String com.magazyn.view.view$9.itemStateChanged(view.java:659)位于 fireItemStateChanged(JComboBox.java:1223)位于 javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1280)

  • 不要将JComboBox放在JTable中,请阅读Oracle教程中的工作代码示例(字符串实例),模型应该只存储JComboBox中作为编辑器的初始值或最后选择的值

  • 直接将数字放入JComboBox/DefaultComboxModel,然后返回的是数字

  • TableModelListener在CellEditor()==null之后触发事件,那么代码就没有意义了


我想OP想知道为什么他的代码在1.7编译器下编译,而不是在1.8编译器下编译。回答得不错,我个人想知道原始代码是如何使用1.7编译的。这不是解决方案,只是解决了实际的OPs问题,正确的解决方案是在模型中存储整数值和/或重写getColumnClass,更多内容请参见Oracle教程-如何使用表来正确地工作代码示例,但我不是来做OP的工作的。我来这里是为了解决OP提出的问题。如果他们自己来找OP,OP会对他们有更深的理解。@christopher,当我从ComboBox中选择值时,我在线程“AWT-EventQueue-0”java.lang.ClassCastException中得到错误
异常:java.lang.Integer不能转换为com.magazyn.view.view$9.itemStateChanged(view.java:659)在javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1223)在javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1280)
@Logar这是1.8中修复的编译器错误。为了获得更好的帮助,更快地发布一个SSCCE/MCVE short runnable,compileable,使用本地变量中JTable/JComboBox的硬编码值这应该是答案,因为他将ComboBox放在单元格中。