我已经尽力保持我的JTable
紧密且安全,仅可编辑列可通过isCellEditable()
。然而,我的客户坚持要求他们双击某个单元格,以便复制其内容,即使它是只读的。我可以让单元格可编辑,并且不对他们可以在setValueAt()
(因此当编辑器退出时它会恢复为原始值)。但我不希望这个应用程序感觉如此自由。有没有一种简单有效的方法可以使JTextField
用作单元格编辑器以允许在编辑器中选择文本,但不可编辑?
我在我的上尝试了这个覆盖JTable
下面,但我不认为我正在寻找正确的“instanceof”对象。
@Override
public TableCellEditor getDefaultEditor(Class<?> columnClass) {
if (super.getDefaultEditor(columnClass) instanceof JTextField) {
JTextField jTextField = new JTextField();
jTextField.setEditable(false);
return (TableCellEditor) jTextField;
}
if (columnClass == null) {
return null;
}
else {
Object editor = defaultEditorsByColumnClass.get(columnClass);
if (editor != null) {
return (TableCellEditor)editor;
}
else {
return getDefaultEditor(columnClass.getSuperclass());
}
}
}
然而,我的客户坚持要求他们双击某个单元格,以便复制其内容,即使它是只读的。
创建一个使用只读文本字段的自定义编辑器:
JTextField tf = new JTextField();
tf.setEditable(false);
DefaultCellEditor editor = new DefaultCellEditor( tf );
table.setDefaultEditor(Object.class, editor);
使用键盘或鼠标选择要复制的文本。然后您可以使用 Ctrl+C 复制选定的文本。或者您甚至可以将弹出菜单添加到文本字段并添加Copy
菜单项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)