TextArea Focus с помощью «Tab» в JTable - PullRequest
       2

TextArea Focus с помощью «Tab» в JTable

5 голосов
/ 12 сентября 2011

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

Есть ливыход, чтобы установить фокус ячейки с помощью клавиши «Tab»?

Ответы [ 3 ]

4 голосов
/ 13 сентября 2011

Переопределить метод changeSelection () JTable:

JTable table = new JTable(...)
{
    //  Place cell in edit mode when it 'gains focus'

    public void changeSelection(
        int row, int column, boolean toggle, boolean extend)
    {
        super.changeSelection(row, column, toggle, extend);

        if (editCellAt(row, column))
        {
            Component editor = getEditorComponent();
            editor.requestFocusInWindow();
//          ((JTextComponent)editor).selectAll();
        }
    }

};
3 голосов
/ 09 декабря 2011

Для меня возникла проблема с методом # 2, где табуляция после выделения мышью фокусировалась на первом столбце, а не на следующем столбце.Я исправил это, вызвав super.changeSelection после оператора if.

public void changeSelection(final int row, final int column, boolean toggle, boolean extend)  
{
    if (editCellAt(row, column)) 
    {
        getEditorComponent().requestFocusInWindow();
    }
    super.changeSelection(row, column, toggle, extend);
}    
3 голосов
/ 12 сентября 2011

При выделении необходимо редактировать ячейку и запросить фокус .) Также обратите внимание, что вам нужно добавить прослушиватель выбора для событий столбца и строки.)


Пример

public static void main(String[] args) throws Exception {

    final JTable t = new JTable(4, 4);
    t.setCellSelectionEnabled(true);

    ListSelectionListener l = new ListSelectionListener() {
        @Override
        public void valueChanged(ListSelectionEvent e) {
            if (t.editCellAt(t.getSelectedRow(), t.getSelectedColumn()))
                t.getEditorComponent().requestFocus();
        }
    };
    t.getSelectionModel().addListSelectionListener(l);
    t.getColumnModel().getSelectionModel().addListSelectionListener(l);

    JFrame frame = new JFrame("Test");
    frame.add(t);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...