JTable применение сложного редактора

96
06 апреля 2021, 20:00

Подскажите пожалуйста. Имеется проблема следующего характера для столбца таблицы JTable применен редактор который в свою очередь возвращает объект JScrollPane (или любой другой контейнер) на нем находится объект JTextArea, так вот при редактировании с помощью клавиатуры невозможно ввести какое либо значение в JTextArea так как оно являясь вложенным объектом не получает фокус (требуется клик мышью). Каким образом можно передать фокус на вложенный объект?

public class PP extends JFrame {
    private String data[][]=new String[][]{{"","",""},{"","",""}};
    private String column[]=new String[]{"Фамилия","Имя","Отчество"};
    public PP() throws HeadlessException {
        super("Кадровая работа");
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setExtendedState(MAXIMIZED_BOTH);
        this.setVisible(true);
        JTable jTable=new JTable(data,column);
        jTable.setRowHeight(40);
        jTable.getColumnModel().getColumn(1).setCellEditor(new EditorJTA());
        this.add(new JScrollPane(jTable));
    }
    private class EditorJTA extends AbstractCellEditor
            implements TableCellEditor {
        private JTextArea editor = new JTextArea();
        private JScrollPane result=new JScrollPane(editor);
        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            editor.setLineWrap(true);
            editor.setWrapStyleWord(true);
            editor.addKeyListener(new KeyAdapter() {
                @Override
                public void keyPressed(KeyEvent e) {
                    if(e.getKeyCode()==KeyEvent.VK_ENTER)
                    {
                        stopCellEditing();
                    }
                }
            });
            result.setBorder(new LineBorder(null, 0));
            return result;
        }
        @Override
        public Object getCellEditorValue() {
            return editor.getText();
        }
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new PP();
            }
        });
    }
}
Answer 1
SwingUtilities.invokeLater(editor::requestFocus);

Вот решение в какой-то мере, однако пропадает первый символ.

READ ALSO
Проблема с самописным слайдером HTML/CSS/JS

Проблема с самописным слайдером HTML/CSS/JS

уважаемые знатоки и профессионалы! Из предложенных мне схожих тем по моим запросам на StackOverflow я ничего не нашёлВозможно, плохо искал или неправильно...

101
Значение параметра в ответе и в JSON объекте, который спарсил браузер отличается

Значение параметра в ответе и в JSON объекте, который спарсил браузер отличается

В общем передаю через Ajax некоторые параметры и вижу такую картину:

120
Почему функция дает разный результат [закрыт]

Почему функция дает разный результат [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

107