2010-12-02 3 views

ответ

2

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

3

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

+1

Не работает для меня. Также (если это работает), в соответствии с API, вы должны использовать requestFocusInWindow(). – camickr 2010-12-02 18:23:48

+0

Не работает. Закончено с помощью desktop.getDesktopManager(). ActivateFrame (jif); где JIF является JInternalFrame – davidahines 2010-12-03 19:06:58

+0

, ни grabFocus(), requestFocus() или transferFocus() не работают в этом случае. setSelected (true), работал для меня. – lepe 2011-12-14 03:39:32

2

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

1

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

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

Пример кода:

попытка { jframe1.setSelected (ложь); jframe2.setSelected (true); } задвижка (PropertyVetoException ех) {}

2

ОП отметил, что 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());