1

我有一个带有 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 就像在后台一样,它没有被选中,它没有聚焦。

4

2 回答 2

1

看看如何使用内部框架java 教程。它给出了一个很好的例子并使用以下内容;

protected void createFrame() {
    MyInternalFrame frame = new MyInternalFrame();
    frame.setVisible(true);
    desktop.add(frame);
    try {
        frame.setSelected(true);
    } catch (java.beans.PropertyVetoException e) {}
}
于 2010-11-03T14:50:48.183 回答
0

您可以在创建桌面并且主框架可见之后使内部框架可见。在这种情况下,将默认选择框架。

因此,您可以执行以下操作的一个示例:

  1. 创建主框架
  2. 创建桌面
  3. 创建内部框架但不使其可见
  4. 在内部框架上启动将可见设置为 true 的线程,但该线程可以等到显示桌面
  5. 使主框架可见
  6. 在线程中调用 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();
    }
}
于 2010-11-03T15:13:58.767 回答