自定义渲染器上的JTable扼流圈

时间:2010-11-08 04:05:32

标签: java jtable

我在JTable中有自定义渲染器。当我的JTable显示时,我会在NullPointerException上获得JTable.prepareRenderer()。我不确定我的自定义渲染器的哪个部分无法预测,但我确定这是我的错。

我的渲染器的简化版本(this spot处的完整版):

public class GradeRenderer extends JLabel implements TableCellRenderer {    
    public Component getTableCellRendererComponent(JTable table, Object grade,
            boolean isSelected, boolean hasFocus, int row, int column) {
        if (grade == null) return new JLabel();
        Grade myself = (Grade) grade;
        int score = myself.getScore();
        setText(String.valueOf(score));
        Assessment thing = myself.getThing();
        GradeStatus status = myself.getStatus();
        AssessmentType type = thing.getType();
        // do some work with status
        // do some work with type
        return this;
    }
}

添加渲染器的代码(完整版here):

model = new GradeEntryModel();
table = new JTable(model);
// some work with table
table.setDefaultRenderer(Grade.class, new GradeRenderer(true));

关于我出错的地方的任何指示?

3 个答案:

答案 0 :(得分:1)

NPE消息将为您提供导致错误的声明。所以这是开始寻找的地方。一旦知道哪个变量为null,就可以开始解决问题了。我们无法帮助您,因为我们不知道错误发生在哪里。

我唯一认为可以建议您不要使用“return null”来返回null渲染器。您可以将文本设置为“”或类似的内容,然后返回渲染器。

如果您需要更多帮助,请发布展示问题的SSCCE

答案 1 :(得分:1)

我同意camickr,NPE告诉你什么是null,所以应该给你一个线索。

但是看着你的代码我猜

 if (grade == null) return null;

返回null是触发NullPointerException的好方法

答案 2 :(得分:0)

原来model中的部分数据是null。那就做了。