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

时间:2018-09-14 04:31:28

标签: java swing 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

2 个答案:

答案 0 :(得分:1)

  

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

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

您仍然可以使用setValueAt(..)JTable的{​​{1}}方法来更改模型中的数据。

因此,您可以做的是在您的重命名菜单项中,您可以显示一个TableModel来提示输入新值。然后,您可以使用上述两种方法之一手动保存值。

答案 1 :(得分:0)

尝试以下方法:

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;
}

}