3

我正在处理一个包含适合内容的行的表。我将 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还是这是一个错误?

4

2 回答 2

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);
      }
    });
  }
});
于 2012-07-10T06:28:19.110 回答
1

设置行高值后,您是否尝试过使表格无效/重绘?

于 2012-07-10T06:12:28.513 回答