2013-03-14 3 views
3

이 코드가있는 JDesktopPane이 있습니다.다른 JInternalFrame을 호출하는 JInternalFrame을 관리하는 방법은 무엇입니까?

public class Menu extends JFrame implements ActionListener{ 
/** 
* Creates new form Portada 
*/ 
public static JDesktopPane desktop; 

public JDesktopPane getDesktop() { 
    return desktop; 
} 

public Menu() { 
    desktop = new JDesktopPane(); 
    setContentPane(desktop); 

    desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); 
    initComponents(); 
} 
} 

는 나는이

desktop.add(orden); 

같은 새로운 구성 요소를 추가하고 내가 그들을 호출 할 때 나는

if(e.getSource()==jMenuItem1_1){ 
     orden.setVisible(true); 
     desktop.setSelectedFrame(orden); 
     desktop.moveToFront(orden); 
     try { 
      orden.setSelected(true); 
     } catch (PropertyVetoException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
    } 

을 사용하여 내가 할 문제는 "오든"경우에 싶어합니다 다른 JInternalFrame을 튀어 나와 다음 코드를 사용합니다.

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: illegal component position 

내가 DesktopPane 새 JInternalFrame를 추가해야합니다 :

searchSupplier.setVisible(true); 
    Main.getInstance().getPortada().getDesktop().add(searchSupplier); 
    Main.getInstance().getPortada().getDesktop() 
      .moveToFront(searchSupplier); 
    try { 
     searchSupplier.setSelected(true); 
    } catch (PropertyVetoException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

나는 이벤트를 2 회 이상 실행

난 다음 오류가? Orden에게? 또는이 오류를 해결하려면 어떻게해야합니까?

+0

하십시오를 추가 할 필요가 있는지 결정하기 위해 getParent를 사용해보십시오 ... – Washu

+1

어떻게 seatchSupplier이 만들어집니다? 메서드를 호출하거나 동일한 인스턴스를 사용할 때마다 새 인스턴스를 만듭니다. – MadProgrammer

+0

동일한 인스턴스를 사용하고 있습니다. – Washu

답변

4

searchSupplier 프레임이 이미 데스크톱에있는 경우 다시 추가 할 수 없습니다. 난 정말이 도움이 필요 @mKorbel 프레임이

if (searchSupplier.getParent() == null) { 
    Main.getInstance().getPortada().getDesktop().add(searchSupplier); 
} 
searchSupplier.setVisible(true); 
Main.getInstance().getPortada().getDesktop().moveToFront(searchSupplier); 
try { 
    searchSupplier.setSelected(true); 
} catch (PropertyVetoException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+2

당신에게 감사의 마음을 표할 방법이 없습니다 ... 페루에 온다면 나는 큰 식사를합니다. 고마워요. :) – Washu

+2

@Washu 흠, 당신은 나를 질투하게 만듭니다. – Mordechai

+0

다음 번에 나는 당신이 나를 도울 수있는 질문을합니다 : PI는 기꺼이 다른 식사를 제공 할 것입니다.) – Washu