仅在选择时设置Jtable单元格可编辑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅在选择时设置Jtable单元格可编辑相关的知识,希望对你有一定的参考价值。

我有一个JTable,我添加了一个DefaultTabelModel。我创建了一个弹出菜单,当用户右键单击表格中的单元格时会出现该菜单。菜单中的一个项目是“重命名”。单击“重命名”项时,如何使所选单元格可编辑?我已经设置了所有元素,这里唯一缺少的部分是使所选单元格可编辑。

DefaultTableModel中的isCellEditable(row, col)方法在这里没有用,因为它根据表中的位置(即行和列)设置单元格的可编辑性,而不是单元格的选择状态。

我怀疑我需要TableCellEditor,但我不知道如何使用它。我非常感谢有关如何实现此目的的示例代码和/或有关如何使用TableCellEditor的解释。先感谢您!!

我的代码的相关部分:

class DataListTable extends JTable
    mouseReleased(): 
        int row = this.getSelectedRow();
        popupmenu.show(this, event.getX(), event.getY());

class RenameDataMenuItem 
    actionPerformed():
    //want to get the (row, col) of the selected cell here and make it editable
答案

单击“重命名”项时,如何使所选单元格可编辑?

isCellEditable(...)方法将确定是否可以通过表编辑器编辑单元格。

您仍然可以使用setValueAt(..)JTableTableModel方法更改模型中的数据。

所以你可以做的是在你的重命名菜单项中,你可以显示一个JOptionPane来提示新值。然后,您只需使用上述任一方法手动保存该值。

另一答案

尝试一下这样的事情:

public class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor {

JComponent component = new JTextField();

@Override
public Object getCellEditorValue() {
    return ((JTextField)component).getText();
}

@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

    if(isSelected) {
        ((JTextField)component).setText((String)value);
    }
    return component;
}

}

以上是关于仅在选择时设置Jtable单元格可编辑的主要内容,如果未能解决你的问题,请参考以下文章

在特定JTable单元上设置焦点和闪烁光标

如何在编辑时选择JTable单元格中的所有文本

JavaFx表格视图TableView设置单元格可编辑

JavaFx表格视图TableView设置单元格可编辑

如何在单击按钮时使 ag 网格中的所有单元格可编辑

如何使 HTML 表格单元格可编辑?