JInternalFrame вперед и сосредоточены

Как можно толкать JInternalFrame на вершину всех кадров в JDesktopPane?

6 ответов

Решение

Прочитайте JInternalFrame API и перейдите по ссылке на учебник Swing по "Как использовать внутренние рамки", где вы найдете рабочий пример того, как "выбрать" активную внутреннюю рамку.

Попробуйте grabFocus() и requestFocus(). Один из должен работать. Я лично использовал только requestFocus().

В этом примереjavax.swing.Action используется для выбора кадров из меню.

ФП отметил, что setSelected не работал, и ему нужно было позвонить activateFrame вручную. Это похоже на проблему, с которой я столкнулся GTKLookAndFeel, У меня было приложение, которое было все готово для использования setSelected в конечном итоге вызвать activateFrame, Работал нормально с Windows и Mac родной внешний вид; activateFrame будет вызван автоматически.

На Ubuntu выбранная система LaF была GTKLookAndFeel и по какой-то причине это не вызывало activateFrame, Не показалось, что setSelected выдает ошибку или что-то, просто не удосужился позвонить activateFrame как другие LaFs, кажется, делают. Я думаю, что это GTKLookAndFeel проблема совместимости.

В конце концов я наказан за это и просто запрещено GTKLookAndFeel, заменив его Metal, Motif также было совместимое поведение (но это так некрасиво...). Код выглядит примерно так:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
if (UIManager.getLookAndFeel() instanceof com.sun.java.swing.plaf.gtk.GTKLookAndFeel)
    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

/* сделать текущий JInternalFrame отмененным, вызвав метод JInternalFrame setSelected (false)

* / затем выберите новый JInternalFrame, используя тот же метод; т.е. setSelected (true)

образец кода:

try {jframe1.setSelected (false); jframe2.setSelected (истина); }catch (PropertyVetoException ex) {}

Закрытие модального JInternalFrame см. Пост г-на Zen(меня)

Другие вопросы по тегам