Как нажимать JInternalFrame
на вершину всех кадров в JDesktopPane?JInternalFrame спереди и сфокусирован
ответ
Ознакомьтесь с API JInternalFrame и перейдите по ссылке к учебнику Swing на тему «Как использовать внутренние фреймы», где вы найдете рабочий пример того, как «выбрать» активный внутренний фрейм.
попробуйте grabFocus() и requestFocus(). Один из них должен работать. Я лично использовал только requestFocus().
В этом example, a javax.swing.Action
используется для выбора кадров из меню.
/* сделать текущий JInternalFrame неустановленным с помощью вызова метода JInternalFrame setSelected (ложь)
* /, а затем выбрать новый JInternalFrame используя тот же метод; т.е. setSelected (истина)
Пример кода:
попытка { jframe1.setSelected (ложь); jframe2.setSelected (true); } задвижка (PropertyVetoException ех) {}
Closing a modal JInternalFrame см пост г-дзен (меня)
ОП отметил, что 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());
Не работает для меня. Также (если это работает), в соответствии с API, вы должны использовать requestFocusInWindow(). – camickr 2010-12-02 18:23:48
Не работает. Закончено с помощью desktop.getDesktopManager(). ActivateFrame (jif); где JIF является JInternalFrame – davidahines 2010-12-03 19:06:58
, ни grabFocus(), requestFocus() или transferFocus() не работают в этом случае. setSelected (true), работал для меня. – lepe 2011-12-14 03:39:32