java - 无法在 Jtable 中调用 JTable Cellrenderer

标签 java swing jtable

我有一个 MultilineCellRenderer应该将多行包裹在 JTable 中细胞。

public class MultiLineTableCellRenderer 
        extends JTextArea implements TableCellRenderer {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public MultiLineTableCellRenderer() {
        setLineWrap(true);
        setWrapStyleWord(true);
        setOpaque(true);
    }

    public Component getTableCellRendererComponent(JTable table,
                                Object value, boolean isSelected,
                                boolean hasFocus, int row, int column) {
        setText(value.toString());//or something in value, like value.getNote()..
        if (isSelected) {
            setForeground(table.getSelectionForeground());
            setBackground(table.getSelectionBackground());
        } else {
            setForeground(table.getForeground());
            setBackground(table.getBackground());
        }
        setSize(table.getColumnModel().getColumn(column).getWidth(),
            getPreferredSize().height);
        if (table.getRowHeight(row) != getPreferredSize().height) {
            table.setRowHeight(row, getPreferredSize().height);
        }
        return this;
    }
}

我正在创建和分配此 cell rendererdefault cell renderermyjtable(cnr_DATA)
MultiLineTableCellRenderer r = new MultiLineTableCellRenderer();
cnr_DATA.setDefaultRenderer(String.class, r);
cnr_DATA.setModel(new DefaultTableModel(data,columns){
    public Class getColumnClass(int col){
        return String.class;
    };
});

我也在从数据库动态更新 jtable 的内容
   DefaultTableModel model = (DefaultTableModel)cnr_DATA.getModel();

删除所有当前行(模型);
Vector<DocumentRow> data = 
    RecycleSQL.readRecycledDocuments();//this line returning vector of objects
for(DocumentRow object:data)
    model.addRow(new string[]{object.getFilename(),
            object.getTitle(),object.getLastTouched()
                            ,object.getLastTouchedBy()});
model.setRowCount(data.size());
cnr_DATA.revalidate();

我的问题是 mycellrenderer没有被调用,也没有包装数据。可否请教我更新JTable内容后如何调用.

根据Madprogrammer和气垫船的建议更新

根据建议修改代码后。现在cellrenderer正在被调用,但它正在将行高设置为默认值。这是调试语句的日志
[2013-08-02 01:20:53,335] [AWT-EventQueue-0] DEBUG MultiLineTableCellRenderer  - setting row height 3  128
[2013-08-02 01:20:53,335] [AWT-EventQueue-0] DEBUG MultiLineTableCellRenderer  - setting row height 3  16

这意味着,在正确设置行的高度后,它将其恢复为默认值

最佳答案

这对我来说看起来很可疑:

cnr_DATA.setDefaultRenderer(String.class, r); // ?? String.class

你确定模型持有字符串 数据,以及 getColumnClass(...) 返回的列类型返回字符串?考虑为需要它的列设置单元格渲染器。

关于java - 无法在 Jtable 中调用 JTable Cellrenderer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18009009/

相关文章:

java - 在错误的地方绘制点

java - JTable 列宽仅在两次请求后更改

java - Eclipse 在开始之前就卡住了

java - JUnit、H2、JaxRS、在测试方法之间放置内存数据库

Java Swing GUI 在鼠标悬停时改变颜色

java - 重命名自定义 JTable 的列 - Java

java - 变量可能尚未初始化——为什么我需要初始化?

java - 以贪婪的方式分配给定的数字

java - JTable 复选框不可编辑

java.lang.illegalargumentexception :cannot set a null TableModel