繁体   English   中英

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

[英]Set Jtable cell editable ONLY upon selection

我有一个 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(...)方法将确定单元格是否可以通过表格编辑器进行编辑。

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

所以你可以做的是在你的重命名菜单项中你可以显示一个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;
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM