我有一个jtable,包含可编辑和不可编辑的单元格。 我想基于可编辑单元格修改不可编辑的单元格,并使用一些公式。
我尝试了以下内容:
int input_column = 0;
int output_column = 5;
table.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
int rowIndex = pricestable.getSelectedRow();
int columnIndex = pricestable.getSelectedColumn();
if (columnIndex == input_column) {
String value1 = table.getModel().getValueAt(rowIndex, input_column).toString();
//do some operations with value1 convert, it to outputvalue
table.setValueAt(outputvalue, rowIndex, output_column);
}
}
});
问题是,tablechanged事件将以递归方式调用... 有谁知道我做错了什么,或者有更好的解决方案吗?
我见过一些覆盖setValueAt()方法的解决方案, 但有时我需要使用两个输入单元格的组合值来生成输出单元格值,并且我可以在填充表格后添加此侦听器,但是如果我覆盖setValueAt()...则无法执行此操作。 p>
答案 0 :(得分:0)
我有一个简单的解决方案来克服递归调用。您的程序将要更改的列不应与addTableListener
有关。
“ colDirty”是宽度为0px的列;
示例代码:
private void addTableListener() {
tableModel.addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent tme) {
if (tme.getType() == TableModelEvent.UPDATE) {
if (tme.getColumn()!=colDirty) { // colDirty = column no which I changed value programatically
tableModel.setValueAt(true, tme.getFirstRow(), colDirty);
}
}
}
});
}