Как правильно обрабатывать несколько гиперссылок в ячейке JTable? - PullRequest
4 голосов
/ 12 августа 2011

В Интернете много дискуссий о том, как использовать гиперссылки в Swing и JTable, например, HyperLink в ячейке JTable .

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

  1. Невозможно обрабатывать несколько гиперссылок в одной ячейке;
  2. Невозможно интуитивно отображать курсор мыши.Всякий раз, когда мышь находится в ячейке с гиперссылкой, она приобретает форму руки, даже когда указатель мыши указывает на какой-либо обычный текст или даже на область emtpy.

Другой подход заключается в отображении JEditorPane в ячейке.но также проблематично, поскольку JTable использует для рисования только JComponent, возвращаемый средством визуализации ячеек, я не думаю, что объекту будут отправлены какие-либо события.Поскольку средство рендеринга по умолчанию будет повторно использовать компонент для каждой ячейки, поэтому не имеет смысла обрабатывать его для каких-либо событий.

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

1 Ответ

3 голосов
/ 12 августа 2011

Другой подход заключается в отображении JEditorPane в ячейке, но это также проблематично, поскольку JTable использует только JComponent, возвращаемый средством визуализации ячеек, для рисования, я не думаю, что объекту будут отправлены какие-либо события.

Попробуйте переводить ячейку в режим редактирования каждый раз, когда ячейка фокусируется.Затем должен отображаться редактор, который является реальным компонентом, и он должен перехватывать все события.Что-то вроде:

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();
        }
    }
};

Я бы настроил код так, чтобы редактировать только ячейку для определенного столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...