デスクトップが作成され、メイン フレームが表示された後で、内部フレームを表示することができます。その場合、フレームはデフォルトで選択されます。
だから、あなたができることの一例:
- メインフレームの作成
- デスクトップの作成
- 内部フレームを作成するが、表示しない
- 内部フレームで visible を true に設定するスレッドを開始しますが、スレッドはデスクトップが表示されるまで待機できます
- メインフレームを見えるようにする
- スレッドで internalFrame.setVisible(true) を呼び出し、スレッドを終了します。
このような場合、内部フレームがデスクトップに表示され、必要に応じて選択されます。
スレッドを使用せずにメイン フレームのイベントにハンドラーを記述する他の解決策を考えるかもしれません。いずれにせよ、表示後に内部フレームを表示するには、メイン フレームを含むデスクトップが表示された後に表示する必要があります。
使用できる例を次に示します。
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.HeadlessException;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
public class Main extends JFrame {
private static final long serialVersionUID = 1L;
private Internal internalFrame;
public Main() throws HeadlessException {
super("Internal Frame Test");
setBounds(10, 10, 600, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLayout(new BorderLayout());
add(createDesktop(), BorderLayout.CENTER);
addWindowListener(new WindowAdapter() {
public void windowOpened(WindowEvent e) {
internalFrame.setVisible(true);
}
});
setVisible(true);
}
private Component createDesktop() {
JDesktopPane d = new JDesktopPane();
internalFrame = new Internal("first");
d.add(internalFrame);
return d;
}
public static class Internal extends JInternalFrame {
private static final long serialVersionUID = 1L;
public Internal(String title) {
super(title);
setBounds(10, 10, 300, 100);
}
}
public static void main(String[] a) {
new Main();
}
}