Как сделать ячейки JTable по умолчанию в режиме перезаписи - PullRequest
3 голосов
/ 29 октября 2010

Ячейки JTable по умолчанию находятся в режиме добавления при двойном щелчке по ячейке.Есть ли способ сделать ячейку по умолчанию режимом перезаписи, вместо этого, IOW, выбрать содержимое ячейки, чтобы, если пользователь начал печатать старый текст, он был заменен новым текстом без необходимости стирать его вручную?

Ответы [ 3 ]

4 голосов
/ 29 октября 2010

Вы можете сделать это, создав собственный TableCellEditor , который можно назначить родительской таблице с помощью setCellEditor () . Этот объект является фабрикой, которая вызывается JTable всякий раз, когда пользователь начинает редактировать ячейку, чтобы создать поле, используемое для фактического редактирования. Вы можете вернуть свой собственный JTextField и просто избегать установки старого значения для достижения того, о чем вы просите. Вам также нужно будет прикрепить слушатель к текстовому полю, чтобы обновить значение в таблице, когда пользователь закончит ввод.

3 голосов
/ 29 октября 2010

Может оказаться полезным Таблица выбора всех редакторов .

2 голосов
/ 21 декабря 2010

Я реализовал следующий метод [addDeletePreviousOnEditBehavior], который отлично работает! Обратите внимание, что вам нужно использовать TableCellEditor . Для этого добавьте следующий код:

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
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...