2010-12-02 57 views

回答

2

閱讀JInternalFrame API並按照「如何使用內部框架」的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中,javax.swing.Action用於從菜單中選擇幀。

1

/*使通過調用取消當前的JInternalFrame的JInternalFrame方法的setSelected(假)

* /,然後選擇使用相同的方法新的JInternalFrame;即的setSelected(真)

示例代碼:

嘗試{ jframe1.setSelected(假); jframe2.setSelected(true); }趕上(PropertyVetoException的前){}

2

的OP指出,setSelected不工作後,他需要手動調用activateFrame。這聽起來與我在GTKLookAndFeel中遇到的問題類似。我有一個應用程序,所有的接線使用setSelected最終觸發activateFrame。使用Windows和Mac原生的外觀和感覺良好地工作; activateFrame會自動調用。

在Ubuntu上,系統選擇LaF爲GTKLookAndFeel,無論出於何種原因,這不叫activateFrame。它似乎沒有出現setSelected正在拋出一個錯誤或任何東西,它只是沒有得到調用activateFrame其他LaF似乎做。我認爲這是一個GTKLookAndFeel兼容性問題。

最後我打了這個,只是禁止GTKLookAndFeel,用Metal代替它。 Motif也有兼容的行爲(但它很醜陋...)。代碼看起來像這樣:

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