JXTable单元格编辑事件(开始/停止编辑)

时间:2018-10-11 02:45:50

标签: java event-listener tablecelleditor jxtable

我有以下代码,我想要实现的是允许用户双击由模型填充的表中的单元格,允许用户编辑特定的单元格,点击将其输入并更新到单元/模型。

我想要什么:

  1. 双击单元格。
  2. 单元格显示当前单元格值
  3. 用户修改值并点击进入
  4. 新值已更新为表格模型

当前代码问题: 双击单元格时当前的CValidatingTextField不会显示所选单元格的值。如果我要在第1行的纬度单元格中键入值“ 123”,如果我要选择第2行或第3行的纬度单元格,它也在文本字段中显示123。

问题:是否可以修改此代码以实现我想要的?还是有一种更简单的方法来检测单元格编辑事件?我已经看到了set / getValueAt的示例,但是我不确定如何将其合并到我的代码中以实现所需的功能。这听起来像是一个简单的问题,但我不确定如何解决。

private void setPointTableCellEditors(){
    JXTable pTable = pointTableModelHandler.getGenericTablePanel().getGenericTable();
    int colCount = pTable.getColumnModel().getColumnCount();

    for (int i = 0; i < colCount; ++i){
        TableColumn col = pTable.getColumnModel().getColumn(i);
        String headerText = col.getHeaderValue().toString();

        if (headerText.equalsIgnoreCase("latitude"){
            final CValidatingTextField latTextField = new CValidatingTextField();
            latTextField.addValidators(new NumericValidator<>(0, Integer.MAX_VALUE, 0, Integer.class));

            DefaultCellEditor defaultCellEditor2 = new DefaultCellEditor(latTextField);
            col.setDefaultCellEditor(defaultCellEditor2);

            defaultCellEditor2.addCellEditorListener(new CellEditorListener(){

                @Override
                public void editingStopped(ChangeEvent e){
                    String latInput = latTextField.getText();
                    //From here i can do whatever i wish with the new value
                }

                @Override
                public void editingCanceled(ChangeEvent e){
                }

            }

        }else if(headerText.equalsIgnoreCase("longitude"){

        }
    }
}

0 个答案:

没有答案