Кто-нибудь знает, как изменить поведение фокуса ячейки движения по умолчанию в Jlist? - PullRequest
1 голос
/ 30 мая 2011

Мой jlist - это тот, в котором ячейки квадратные и имеют фиксированные размеры, и порт просмотра заполняется ими, поэтому количество столбцов (и, я думаю, строки) действительно может измениться.

Мой код для этого довольно сложный:

http://code.google.com/p/bookjar-utils/source/browse/BookJar-utils/src/util/swing/components/ImageList.java

То, что я хочу сделать, это разрешить различные движения клавиатуры с помощью клавиш со стрелками. Вместо того, чтобы использовать только ↑ и ↓ для перемещения строк вверх и вниз, также разрешите ← и →, если выбранная ячейка перекрывает западный или восточный края области просмотра .

Должен ли я просто рассчитать, сколько ячеек помещается в "строку", и добавить список ключей для стрелок, который вступает во владение, когда по краям, когда поведение по умолчанию, кажется, ничего не делает?

В этом отношении, где определяется исходное поведение? клавиши ← и → позволяют перемещаться подряд, если они не находятся на краях ряда.

1 Ответ

3 голосов
/ 30 мая 2011

В Swing каждый виджет имеет свой собственный UI-класс, который контролирует его поведение.LookAndFeel управляет этими связями между виджетом и пользовательским интерфейсом ( обзор архитектуры ).

Так что ИМХО правильное место, чтобы сделать то, что вы просите, - это расширить BasicTableUI и переписать метод, который определяет виджеты ActionMap для действий клавиатуры, заменив некоторые действия вашей собственной реализацией:

class MyTableUI extends BasicTableUI {
    ...

    @Override
    protected void installKeyboardActions() {
        super.installKeyboardActions();
        final ActionMap actionMap = getTable().getActionMap();
        actionMap.put( NEXT_ROW, 
            new MyNewRowSelectionAction( NEXT_ROW, actionMap.get( NEXT_ROW ) ) );
        ...

Обратите внимание, что ключи для ActionMap являются частными в BasicTableUI.Actions, поэтому их необходимо скопировать.

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