2

複数の行をセル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 rendererますmyjtable(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();

removeAllCurrentRows(モデル);

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 と hovercraft の提案による更新

提案に従ってコードを変更した後。現在、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

つまり、行の高さを正しく設定した後、デフォルト値に戻します

4

1 に答える 1