2010-11-03 1 views
0

У меня есть JFrame с JDesktopPane и внутри JDesktopPane, я запускаю с конструктором JInternalFrame. (Его приложение, как пользователи Authentification с пользователем текстового поля и текстовым полем прохода)Как я могу выбрать по умолчанию InternalFrame на JDesktopPane?

Я Lauch внутренними, как это:

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

Старается с:

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

Как я могу lauch 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

+0

Я добавил пример. Можешь попробовать. –

+0

Хорошо! спасибо !! – wooshot

1

Посмотрите на учебник java How To Use Internal Frames. Это дает хороший пример и использует следующее:

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

Смежные вопросы