gpt4 book ai didi

java - 使用 JTable.setRowHeight 更改行高不起作用

转载 作者:搜寻专家 更新时间:2023-11-01 02:30:11 25 4
gpt4 key购买 nike

我正在处理一个包含适合内容的行的表格。我将 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 像素,但它不起作用 - 行高永远不会改变。更奇怪的是,如果我像这样将调用移动到按钮的 Action 监听器,JTable.setRowHeight 方法可以正常工作:

button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.addRow(new String[] {"abc"});
talbe.setRowHeight(table.getRowCount() - 1, 100);
}
});

我绝对不能依赖这个“解决方案”,因为表格模型可以从其他地方更改。我是否正确使用了 TableModelListener 还是这是一个错误?

最佳答案

如何使用 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);
}
});
}
});

关于java - 使用 JTable.setRowHeight 更改行高不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11407506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com