Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使JTable单元格默认为覆盖模式_Java_Jtable - Fatal编程技术网

Java 如何使JTable单元格默认为覆盖模式

Java 如何使JTable单元格默认为覆盖模式,java,jtable,Java,Jtable,双击单元格时,默认情况下JTable单元格处于追加模式。 有没有办法使单元格默认为覆盖模式,请选择单元格的内容,这样,如果用户开始键入新文本,旧文本将被替换为新文本,而不必手动擦除它?您应该能够通过创建自己的,可以使用将其分配给父表来实现这一点。该对象是一个工厂,每当用户开始编辑单元格时,JTable就会调用该工厂,以创建用于实际编辑的字段。您可以返回自己的JTextField,只需避免设置旧值即可实现您的要求。用户完成键入后,您还必须在文本字段中附加一个侦听器,以更新表中的值。您可能会找到有用

双击单元格时,默认情况下JTable单元格处于追加模式。
有没有办法使单元格默认为覆盖模式,请选择单元格的内容,这样,如果用户开始键入新文本,旧文本将被替换为新文本,而不必手动擦除它?

您应该能够通过创建自己的,可以使用将其分配给父表来实现这一点。该对象是一个工厂,每当用户开始编辑单元格时,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()方法)中的关键代码很容易提取出来并适应另一个自定义表子类。