如何在 JDesktopPane 上默认选择 InternalFrame?
Posted
技术标签:
【中文标题】如何在 JDesktopPane 上默认选择 InternalFrame?【英文标题】:How I can selected by default an InternalFrame on a JDesktopPane? 【发布时间】:2011-05-04 13:05:45 【问题描述】:我有一个带有 JDesktopPane 的 JFrame,在 JDesktopPane 内部,我使用构造函数 JInternalFrame 启动。 (它是一个类似于认证用户的应用,带有文本框用户和文本框通行证)
我像这样启动内部:
MyInternalFrame internalF = new MyInternalFrame();
desktopPane.add(internalF);
我尝试:
internalF.setVisible(true);
internalF.setSelected(true);
desktopPane.getDesktopManager().activateFrame(internal);
desktopPane.setSelectedFrame(internal);
如何启动 JInternalFrame 及其默认选择? 当我运行应用程序时,internalframe 就像在后台一样,它没有被选中,它没有聚焦。
【问题讨论】:
【参考方案1】:看看How To Use Internal Frames java 教程。它给出了一个很好的例子并使用了以下内容;
protected void createFrame()
MyInternalFrame frame = new MyInternalFrame();
frame.setVisible(true);
desktop.add(frame);
try
frame.setSelected(true);
catch (java.beans.PropertyVetoException e)
【讨论】:
+1,教程不仅对这个问题有帮助,而且可以作为以后问题的参考。【参考方案2】:您可以在创建桌面并且主框架可见之后使内部框架可见。在这种情况下,将默认选择框架。
那么,你可以做的一个例子:
-
创建主框架
创建桌面
创建内部框架但不使其可见
在内部框架上启动将 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();
【讨论】:
我添加了一个示例。你可以试试看。以上是关于如何在 JDesktopPane 上默认选择 InternalFrame?的主要内容,如果未能解决你的问题,请参考以下文章
在 JDesktopPane 中居中 JInternalFrame 无法正常工作
如何防止 Woocommerce 在结帐页面上选择默认付款方式?