Как сосредоточиться на JTextField в таблице - PullRequest
3 голосов
/ 19 декабря 2008

Я пишу функцию поиска и замены в некой программе для работы с электронными таблицами. Я хочу, чтобы при поиске строки программа показывала таблицу с найденным элементом.

Пока все хорошо, но я не могу получить элемент, чтобы получить фокус, с курсором в нем, чтобы вы могли немедленно начать печатать.

Я использую настроенный JTable, а также настроенный TableCellEditor. Следующие приемы не работают: (в пределах настроенного TableCellEditor):

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
        my_textfield.requestFocus(); 
    } 
}); 

или

my_jtable.editCellAt(0, 3);
my_jtable.requestFocus();

или

my_jtable.getEditorComponent().requestFocusInWindow();

Я что-то упустил? Есть ли хорошее описание (хорошая блок-схема), показывающее, как происходят события? Или пример кода, который может сделать что-то подобное?

Ответы [ 3 ]

2 голосов
/ 20 декабря 2008

С некоторым поиском я нашел ветку форума: программным путем начал редактировать ячейку в JTable ответил со следующей идеей:

(в подклассе JTable)

editCellAt(row,column);

requestFocus();
DefaultCellEditor ed = (DefaultCellEditor)
getCellEditor(row,column);

ed.shouldSelectCell(new ListSelectionEvent(this,row,row,true));

Будет ли это работать?

0 голосов
/ 04 мая 2015

Проверьте, включен ли выбор для экземпляра пользовательской таблицы, как показано ниже:

table.setColumnSelectionAllowed(true);
table.setRowSelectionAllowed(true);

Если этот параметр установлен, обычно вызов table.editCellAt(row, col); начинает редактирование. Пример:

JTable myTable = new JTable(rows, cols);
myTable.setColumnSelectionAllowed(true);
myTable.setRowSelectionAllowed(true);

и где-то еще .. где требуется редактирование,

boolean wasEditStarted = table.editCellAt(row, col);
if (wasEditStarted) {
  table.changeSelection(row, col, false, false);
}
0 голосов
/ 19 декабря 2008

Вы пробовали editcellat без запроса focus?

также убедитесь, что вы переопределяете / Implemenet для возврата true

    /**
     * Returns true.
     * @param anEvent  an event object
     * @return true
     */
    public boolean shouldSelectCell(EventObject anEvent) { 
    return true; 
    }
...