Java:JTable更改侦听器,“对象无法转换为字符串”错误

时间:2014-07-14 23:09:35

标签: java string swing jtable listener

我有一个JTable和一个应该控制程序对各种动作的响应的类,我写的第一个是单元格更改事件。

每行都是从Part对象生成的,每列的列类都是相应设置的。

Part(String partName, String make, String partNumber,
        String altPartNumber, Double price, Integer quantity,
        String description, Boolean isAutomotive, Boolean isMarine,
        Boolean isIndustrial)
{
    //...code not shown...
}

零件对象存储在可序列化的ArrayList<Part>

基本上,事件处理代码需要做的是使用从ArrayList获得的更新数据更新此JTable中特定部件对象的参数值。

下面的代码演示了我想如何做到这一点;这里出现标题中提到的错误。任何人都可以解释如何处理这个问题吗?

public class EventController extends UI implements TableModelListener
{ 
    // Declarations:

    private int row;
    private int column;

    private Part partToChange;

    // ...Omitted for brevity...
    private String updatedName;
    private String updatedMake;
    private Integer updatedQuantity;
    // Don't need declarations for the booleans, can just toggle them.

    @Override
    public void tableChanged(TableModelEvent e)
    {
        // Find out where the change took place...
        this.column = e.getColumn();
        this.row = e.getFirstRow();
        // Get the new value...

        // Send the new value to parts...
        partToChange = data.getPart(row);
        switch(column)
        {
            case 0:
                updatedName = getTableModel().getValueAt(row, column); 
                // ERROR OCCURS HERE ^
                partToChange.setName(updatedName); 
        }
    }
}

1 个答案:

答案 0 :(得分:3)

你的getTableModel().getValueAt(row, column);返回一个Object引用而不是String,但是你将它分配给一个String变量。您的选择包括:

  • 您可以将返回的内容强制转换为String,但如果您的强制转换不正确,如果它实际上不是String,则可能会出现问题。
  • 或者你可以打电话给toString()。如果它不是String,则不会出现异常,但返回的String可能不是您想要使用的。但是,如果变量为null,则会出现问题,如果不首先检查null,则存在NullPointerException的风险。我建议你走这条路。
  • 或者根据Richard Walton,使用String.valueOf()可以避免toString()的空例外问题。谢谢理查德!