2010-11-03 141 views
0

我有一个带JDesktopPane的JFrame,并且在JDesktopPane中,我用构造函数启动了一个JInternalFrame。 (它像鉴别用户的应用程序,与文本框的用户和文本框通)如何在默认情况下选择JDesktopPane上的InternalFrame?

我劳克内部是这样的:

MyInternalFrame internalF = new MyInternalFrame(); 
desktopPane.add(internalF); 

我尝试:

internalF.setVisible(true); 
internalF.setSelected(true); 
desktopPane.getDesktopManager().activateFrame(internal); 
desktopPane.setSelectedFrame(internal); 

我怎样才能启动JInternalFrame并将其默认选中? 当我运行应用程序时,内部框架就像在后台,它没有被选中,它没有被聚焦。

回答

0

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

所以,你可以做什么一个例子:

  1. 创建主框架
  2. 创建桌面
  3. 创建内部框架,但不使其可见
  4. 启动线程,设置可见在内部框架上为true,但线程可以等待直到桌面显示
  5. 使主框架可见
  6. 在线程c所有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(); 
    } 
} 
+0

我尝试两个评论的例子,并且不正常工作 – wooshot 2010-11-03 15:53:14

+0

我已经添加了一个示例。你可以尝试一下。 – 2010-11-03 16:25:36

+0

好的! 谢谢! – wooshot 2010-11-03 17:26:18

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) {} 
} 
+0

+1,不仅这个问题的教程帮助,但它可以被用来作为未来的问题的参考。 – camickr 2010-11-03 14:54:43

相关问题