2013-03-17 3 views
0

마우스 클릭시 JDesktopPane에 추가되는 여러 개의 JInternalFrames로 Swing 응용 프로그램을 만들었습니다. 같은 내부 프레임의 인스턴스가 DesktopPane에 하나만 존재하도록합니다. 사용자가 프레임을 열 때 같은 프레임이 두 번 표시되는 것을 원하지 않습니다.한 번에 하나의 JInternalFrame 만 엽니 다.

+2

우리에게 당신이 시도 아무것도 표시합니다. –

+0

이 메서드는 "removeAll()"이라고 사용했습니다. – pixylife

+0

생각 : Label 또는 Button을 클릭하면 setEnable (false)을 사용하면 사용자가 InternalFrame을 닫고 버튼을 활성화 할 때까지 버튼이 비활성화됩니다. – Azad

답변

2

간단한 해결책은 HashMap<String,JInternalFrame>을 만드는 것입니다. keyJInternalFrame의 제목이되고 value은 현재 JInternalframeobject입니다. 내부 프레임을 처음 열면 에 (key,value) 쌍을 저장하십시오. 모든 JInternalFrame 창에 대한 닫기 버튼을 비활성화하여 표시된 JInternalFrame 창을 삭제할 수 없습니다. 키보드의 esc 버튼을 사용하여 같은 내부 프레임을 열 menu item을 클릭하면 현재 화면 JInternalFrameDesktopPane 부탁해에 최소화 누를 때, 그 JInternalFrametitle가 기존되어 있는지 확인하도록, 각 JInternalFrame 객체에 esc 키를 등록 그 HashMapkey입니다. 존재하는 경우 key에 대해 value을 검색하고 JInternalFrame 변수를 참조한 다음 DesktopPane에 복원하십시오. 해당 입력이 title 인 경우 해당 HashMap에 존재하지 않는 경우 새 JInternalFrame 개체를 만들고 HasMap에 동일한 항목을 입력하고 표시하십시오.

참고 : 내가 여기에 게시 무엇 이건 당신이 JInternalFrame 각각은 고유의 다른 functionality의 많은 유형을 가질 수 있습니다 상황에 대한 솔루션입니다, 당신은 각각 하나의 instance을 유지하려면 그 중 JInternalFrame입니다.

+0

http://docs.oracle.com/javase/tutorial/uiswing/events/internalframelistener.html 유용한 정보입니다. – pixylife

+0

@luzifer : 예. 이전에 통과 했었습니다. JInternalFrame을 숨기거나 최소화 할 수 있습니다. 당신의 필요에 따라 ..여기에 게시 한 것은 고유 한 서로 다른 기능을 가진 여러 유형의'JInternalFrame'을 가질 수있는 상황을위한 솔루션이며, 각각의 JInternalFrame 인스턴스를 하나만 유지하려고합니다. –

+0

고마워요. .. – pixylife

2

다음은 샘플 코드 일 수 있습니다. 이 도움을 바랍니다. JdesktopPane이있는 메인 애플리케이션에서 내부 프레임을 호출하는 메뉴 조치.

private void YourJinternalFrameMenuItemActionPerformed(java.awt.event.ActionEvent evt) {             

    YourJinternalFrame nw = YourJinternalFrame.getInstance(); 
    nw.pack(); 
    //usefull part for you.. if open shows, if not creates new one 
    if (nw.isVisible()) { 
    } else { 
     desktopPane.add(nw); 
     nw.setVisible(true); 
    } 
    try { 

     nw.setMaximum(true); 
    } catch (PropertyVetoException ex) { 
     Logger.getLogger(MainApplication.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

은 YourJinternalFrame

private static YourJinternalFrame myInstance; 

public static YourJinternalFrame getInstance() { 
    if (myInstance == null) { 
    myInstance = new YourJinternalFrame(); 
    } 
return myInstance; 
1

이 간단한 코드 시도의 내부를 넣어 : 시도

YourJinternalFrame nw = new YourJinternalFrame(); 

private void YourJinternalFrameMenuItemActionPerformed(java.awt.event.ActionEvent evt) {             
    if(!nw.isVisible()){ 
     YourJDesktopPane.add(nw); 
     nw.setVisible(true); 
    } 

} 
0

을이 간단한 코드 걸릴 클래스 변수 CHK와 동일한 0 다음 전화 JFrame의 설정 방법 구성 요소 제거 된 이 chk = 0으로 다시 당신이 내부 프레임이 CHK = 1 을 설정 전화 제로 여부 그게 전부입니다 wheather를 내부 호출에 CHK 비교하면 모든

관련 문제