如何在 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 在结帐页面上选择默认付款方式?

如何在具有 null 值的 Angular 选择元素上使用默认的“请选择”选项进行验证?

如何在JTable中选择行或列?

动态生成选项时如何使默认值在选择上起作用? [复制]