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) {}