Java 如何使JTable单元格默认为覆盖模式
双击单元格时,默认情况下JTable单元格处于追加模式。Java 如何使JTable单元格默认为覆盖模式,java,jtable,Java,Jtable,双击单元格时,默认情况下JTable单元格处于追加模式。 有没有办法使单元格默认为覆盖模式,请选择单元格的内容,这样,如果用户开始键入新文本,旧文本将被替换为新文本,而不必手动擦除它?您应该能够通过创建自己的,可以使用将其分配给父表来实现这一点。该对象是一个工厂,每当用户开始编辑单元格时,JTable就会调用该工厂,以创建用于实际编辑的字段。您可以返回自己的JTextField,只需避免设置旧值即可实现您的要求。用户完成键入后,您还必须在文本字段中附加一个侦听器,以更新表中的值。您可能会找到有用
有没有办法使单元格默认为覆盖模式,请选择单元格的内容,这样,如果用户开始键入新文本,旧文本将被替换为新文本,而不必手动擦除它?您应该能够通过创建自己的,可以使用将其分配给父表来实现这一点。该对象是一个工厂,每当用户开始编辑单元格时,JTable就会调用该工厂,以创建用于实际编辑的字段。您可以返回自己的JTextField,只需避免设置旧值即可实现您的要求。用户完成键入后,您还必须在文本字段中附加一个侦听器,以更新表中的值。您可能会找到有用的方法。我已经实现了以下方法[addDeletePreviousOnEditBehavior],效果很好!请注意,您需要使用一些。为此,请添加以下代码:
JTable table=new JTable();
JTextField field=new JTextField();
addDeletePreviousOnEditBehavior(field);
table.setCellEditor(new DefaultCellEditor(field));
方法是:
public static void addDeletePreviousOnEditBehavior(final JComponent field) {
field.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent fe) {
field.putClientProperty(DELETE_ON_EDIT, true);
}
@Override
public void focusLost(FocusEvent fe) {
}
});
field.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent ke) {
}
@Override
public void keyPressed(KeyEvent ke) {
if ((!(ke.isActionKey()
|| isSpecial(ke.getKeyCode())))
&& ((Boolean) field.getClientProperty(DELETE_ON_EDIT))) {
System.out.println("Key:" + ke.getKeyCode() + "/" + ke.getKeyChar());
field.putClientProperty(DELETE_ON_EDIT, false);
if (field instanceof JFormattedTextField) {
((JFormattedTextField) field).setValue(null);
}
if (field instanceof JTextComponent) {
((JTextComponent) field).setText(null);
}
}
}
@Override
public void keyReleased(KeyEvent ke) {
// do nothing
}
});
}
使用这种方法,您可能需要为每种类型的数据创建自定义编辑器。一个是字符串、整数等。我查看了RXTable,看看是否能理解,但这很难,因为我使用的是NetBeans生成的swing.JTable()。此外,我还根据用户输入在表中添加和删除行。有没有一种方法可以添加一个监听器,当单元格接收到焦点时,该监听器只需单击鼠标(或选项卡导航)即可对单元格执行全选操作?我想让这个NetBeans JTable能够像Excel表一样工作,因为很多人对该用户界面都很满意。如果这对其他人有帮助,RXTable(editCellAt()方法)中的关键代码很容易提取出来并适应另一个自定义表子类。