これは、Table
のjavadocsのサンプルに基づいています。私は1つのマイナーなハックを手動でテーブルの更新をトリガするsetModel(getModel())
た:
Form hi = new Form("Table", new BorderLayout());
TableModel model = new DefaultTableModel(new String[] {"Col 1", "Col 2", "Col 3"}, new Object[][] {
{"Row 1", "Row A", "Row X"},
{"Row 2", "Row B can now stretch", null},
{"Row 3", "Row C", "Row Z"},
{"Row 4", "Row D", "Row K"},
}) {
public boolean isCellEditable(int row, int col) {
return col != 0;
}
};
Table table = new Table(model) {
private int selectedRow = -1;
@Override
protected Component createCell(Object value, int row, int column, boolean editable) {
Component cell;
if(row < 0) {
cell = super.createCell(value, row, column, editable);
} else {
cell = new Button(value.toString());
cell.setUIID("TableCell");
((Button)cell).addActionListener(e -> {
selectedRow = row;
setModel(getModel());
});
}
if(selectedRow > -1 && selectedRow == row) {
cell.getAllStyles().setBgColor(0xff0000);
cell.getAllStyles().setBgTransparency(100);
}
return cell;
}
@Override
protected TableLayout.Constraint createCellConstraint(Object value, int row, int column) {
TableLayout.Constraint con = super.createCellConstraint(value, row, column);
if(row == 1 && column == 1) {
con.setHorizontalSpan(2);
}
con.setWidthPercentage(33);
return con;
}
};
hi.add(BorderLayout.CENTER, table);
hi.show();
ありがとうございました。私はトピックについての研究を行い、質問をする前に、この同じ解決策を考え出しました。しかし、それは私のすべての要件を満たしていません。私は答えとして投稿する代替案を考え出した。あなたの助けをもう一度ありがとう。 – Chuck