各行の高さを変えることができる JTable のセル レンダラーを作成しています。テーブルの各列について、隣接する非表示の列をテーブルに追加しました。これには、行の高さの int 値が含まれているだけです。これは非効率的であり、より複雑なサイズ変更を実装すると問題が発生すると思います。
getTableCellRendererComponentからアクセスできるメインクラスによって初期化された静的リストを持つ方法はありますか?
私が現在行っていることのスタンドアロンの例を次に示します。
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
public class variableRowHeightDemo extends JFrame {
public variableRowHeightDemo() {
JTable vr_table = new JTable();
vr_table.setModel(new DefaultTableModel(
new Object[][]{
{"Height: 30", 30},
{"Height: 60", 60},
{"Height: 90", 90},},
new String[]{
"String", "int height value"
}));
vr_table.setDefaultRenderer(Object.class, new variableRowHeightRenderer());
add(vr_table);
pack();
}
static class variableRowHeightRenderer extends JTextField implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int col) {
// rows heights stored in second invis column
int height = (int) table.getModel().getValueAt(row, 1);
table.setRowHeight(row, height);
this.setText(value.toString());
return this;
}
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new variableRowHeightDemo().setVisible(true);
}
});
}
}
基本的に、テーブルモデルの外に行の高さを保存したいのですが、行の高さのリストを最終的にせずにサブクラスからそれらにアクセスする方法がわかりません。また、私の実装に明らかな問題がある場合は、それを聞いていただければ幸いです。
ありがとう、
ジェームズ