在JTable中编辑时防止重复值

时间:2014-02-23 14:24:27

标签: java validation jtable tablecelleditor

我有一个JTable,其中包含用户可以编辑的数据。我想确保当用户编辑“name”列时,新值在表中是唯一的,即没有其他具有相同名称的条目。我尝试使用自定义单元格编辑器和输入验证程序,如下所示:

class CellEditor extends DefaultCellEditor {
    InputVerifier verifier = null;

    public CellEditor(InputVerifier verifier) {
        super(new JTextField());
        this.verifier = verifier;
    }

    @Override
    public boolean stopCellEditing() {
        return verifier.verify(editorComponent) && super.stopCellEditing();
    }
}

class MyVerifier extends InputVerifier {
    DefaultTableModel tm = null;

    MyVerifier(DefaultTableModel tm) {
        super();
        this.tm = tm;
    }
    @Override
    public boolean verify(JComponent input) {
        boolean verified = true;
        String text = ((JTextField) input).getText();
        for (int i = 0; i < tm.getRowCount(); i++) {
            String s = (String) tm.getValueAt(i, 1);
            if (s.equals(text)) {
                verified = false;
                break;
            }
        }
        return verified;
    }
} 

在我的代码中,我使用以下方法将单元格编辑器设置为特定列:

tm = (DefaultTableModel) myTable.getModel();
myTable.getColumnModel().getColumn(1).setCellEditor(new CellEditor(new MyVerifier(tm)));

问题是,当我遍历列而不改变任何内容时,我总是得到重复的值,因为verify方法中的循环检查所有行,包括焦点行本身。我想排除这种情况,但我无法访问焦点条目的行号。还有其他解决方案吗?感谢。

0 个答案:

没有答案