2010-12-02 4 views

답변

2

JInternalFrame API를 읽고 "내부 프레임 사용 방법"에 대한 스윙 튜토리얼의 링크를 따라 가면 활성 내부 프레임을 "선택"하는 방법에 대한 실제 예제를 찾을 수 있습니다.

+0

DestopManager.activateFrame (frame)이 솔루션으로 밝혀졌습니다. 거기에있는 예제 중 하나에서 파생되었습니다. 도와 주셔서 감사합니다. – davidahines

+1

@ dah, 나는 frame.setSelected (true)가 더 쉬울 것이라고 생각했을 것입니다. 이것은 새 프레임이 만들어 질 때마다 예제가 사용하는 것입니다. 자습서에서 참조 된 activateFrame() 메서드를 본 적이 없습니다. – camickr

+0

나는 왜 그런지 모르지만 그것은 나를 위해 작동하지 않았다. – davidahines

3

grabFocus() 및 requestFocus()를 시도하십시오. 그 중 하나가 작동해야합니다. 개인적으로 requestFocus() 만 사용했습니다.

+1

나를 위해 작동하지 않습니다. 또한 (작동했다면) API에 따라 requestFocusInWindow()를 사용해야합니다. – camickr

+0

작동하지 않았습니다. desktop.getDesktopManager()를 사용하여 종료되었습니다. activateFrame (jif); 여기서 JIF는 JInternalFrame입니다. – davidahines

+0

이 경우 grabFocus(), requestFocus() 또는 transferFocus()도 작동하지 않습니다. setSelected (true), 나를 위해 일했다. – lepe

2

example에서, javax.swing.Action은 메뉴에서 프레임을 선택하는 데 사용됩니다.

1

/* JInternalFrame의 방법 (false)를 호출하는 setSelected 전류 JInternalFrame를 해제 할

*/후 동일한 방법을 사용하여 새로운 JInternalFrame의 선택] 즉, (진정한)하는 setSelected

샘플 코드 :

시도 { jframe1.setSelected (거짓); jframe2.setSelected (true); } 캐치 (PropertyVetoException는 예) {}

2

영업 이익은 setSelected가 작동되지 않았 음을 지적했다으로 게시물을 참조, 그는 수동으로 activateFrame를 호출 할 필요가 있었다. 이것은 GTKLookAndFeel과 관련된 문제와 유사합니다. 모든 을 사용하여 결국 activateFrame을 트리거하는 응용 프로그램이 있습니다. Windows 및 Mac 기본 모양 및 느낌으로 잘 작동합니다. activateFrame이 자동으로 호출됩니다.

우분투에서 시스템을 선택한 LaF GTKLookAndFeel 그리고 어떤 이유로 이건 activateFrame이 아니었다. setSelected이 오류를 던지고있는 것처럼 보이지는 않았고, 다른 LaF가하는 것처럼 activateFrame을 호출하는 것이 아닙니다. 나는 GTKLookAndFeel 호환성 문제라고 생각합니다.

결국 나는 이것에 punted , 그것을 Metal로 바꾸는 것을 금지했다. Motif도 호환 가능한 동작을 가졌지 만 (너무 추함 ...). 코드는 다음과 같습니다.

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

+1 아마도 그게 그것을 설명합니다. 우분투에서 "Nimbus"를 사용하고 있습니다. – lepe