仅在选择时将 Jtable 单元格设置为可编辑
Set Jtable cell editable ONLY upon selection
我有一个 JTable,我向它添加了一个 DefaultTabelModel。我创建了一个弹出菜单,当用户右键单击 table 中的单元格时会出现该菜单。菜单中的一项是 "Rename." 单击“重命名”项时如何使所选单元格编辑table?我已经设置了所有元素,这里唯一缺少的部分是使选定的单元格 editable。
DefaultTableModel 中的 isCellEditable(row, col)
方法在这里没有帮助,因为它根据单元格在 table 中的位置(即行和列)设置单元格的可编辑性,而不是单元格的选择状态.
我怀疑我需要 TableCellEditor,但我不确定如何使用它。我非常感谢有关如何实现此目的的示例代码 and/or 解释如何为此目的使用 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
按照以下方式尝试:
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;
}
}
How can I make the selected cell editable when the Rename item is clicked?
isCellEditable(...)
方法将确定是否可以通过 table 编辑器编辑单元格。
您仍然可以使用 JTable
或 TableModel
的 setValueAt(..)
方法更改模型中的数据。
因此,您可以在重命名菜单项中显示 JOptionPane
以提示输入新值。然后您只需使用上述任一方法手动保存该值。
我有一个 JTable,我向它添加了一个 DefaultTabelModel。我创建了一个弹出菜单,当用户右键单击 table 中的单元格时会出现该菜单。菜单中的一项是 "Rename." 单击“重命名”项时如何使所选单元格编辑table?我已经设置了所有元素,这里唯一缺少的部分是使选定的单元格 editable。
DefaultTableModel 中的 isCellEditable(row, col)
方法在这里没有帮助,因为它根据单元格在 table 中的位置(即行和列)设置单元格的可编辑性,而不是单元格的选择状态.
我怀疑我需要 TableCellEditor,但我不确定如何使用它。我非常感谢有关如何实现此目的的示例代码 and/or 解释如何为此目的使用 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
按照以下方式尝试:
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;
}
}
How can I make the selected cell editable when the Rename item is clicked?
isCellEditable(...)
方法将确定是否可以通过 table 编辑器编辑单元格。
您仍然可以使用 JTable
或 TableModel
的 setValueAt(..)
方法更改模型中的数据。
因此,您可以在重命名菜单项中显示 JOptionPane
以提示输入新值。然后您只需使用上述任一方法手动保存该值。