複数の行をセル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 renderer
いdefault 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
つまり、行の高さを正しく設定した後、デフォルト値に戻します