我正在制作一个包含适合内容的行的表。我将TableModelListener安装到表模型中,这样无论何时添加新行,新添加的行的高度都会自动更改。这是我的测试代码:
final DefaultTableModel model = new DefaultTableModel(0, 1);
final JTable table = new JTable(model);
model.addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
// TO DO: replace 100 with the actual preferred height.
table.setRowHeight(e.getFirstRow(), 100);
}
});
JButton button = new JButton("Add Row");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.addRow(new String[] {"abc"});
}
});
我希望当单击“添加行”按钮时,会向表中添加一个新行,其高度为100像素,但它不起作用 - 行高永远不会改变。更奇怪的是,如果我将调用移动到按钮的动作侦听器,JTable.setRowHeight
方法可以正常工作:
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.addRow(new String[] {"abc"});
talbe.setRowHeight(table.getRowCount() - 1, 100);
}
});
当然,我不能依赖这个“解决方案”,因为表格模型可以从其他地方改变。我是否正确使用TableModelListener
或这是一个错误?
答案 0 :(得分:4)
如何使用EventQueue.invokeLater(...)
model.addTableModelListener(new TableModelListener() {
@Override public void tableChanged(final TableModelEvent e) {
// TO DO: replace 100 with the actual preferred height.
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
table.setRowHeight(e.getFirstRow(), 100);
}
});
}
});
答案 1 :(得分:1)
您是否尝试在设置行高值后使表格无效/重新绘制?