您可以在创建桌面并且主框架可见之后使内部框架可见。在这种情况下,将默认选择框架。
因此,您可以执行以下操作的一个示例:
- 创建主框架
- 创建桌面
- 创建内部框架但不使其可见
- 在内部框架上启动将可见设置为 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();
}
}