2014-02-21 6 views
0

internal frame을 사용하는 일부 코드를 테스트하고 있습니다. 따라서 이미 내 프로그램에서 실행중인 새로운 internal frame을 열지 않으려 고합니다. 내 outerframe에 이미 열려있는 internal frame을 열려면 메뉴를 클릭하면 그 내부 프레임이 제 프레임에 복제 될 수 있으며 어떻게 그 문제를 해결할 수 있습니까? 부디.내부 프레임을 복제하지 않는 방법

답변

1

여기에 아주 간단한 예가 나와 드리겠습니다.

내가이 JInternalFrame의에게 JFrame의를 생성하고 JDesktopPane에
import de.professional_webworkx.dashboard.internalframes.WeatherIFrame; 
import java.awt.Menu; 
import java.awt.MenuBar; 
import java.awt.MenuItem; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JDesktopPane; 
import javax.swing.JFrame; 
import javax.swing.event.InternalFrameAdapter; 
import javax.swing.event.InternalFrameEvent; 
import javax.swing.event.InternalFrameListener; 

public class MainFrame extends JFrame { 

    private JDesktopPane desktopPane; 
    private WeatherIFrame weatherIFrame; 

    /** 
    * Menuitems 
    */ 
    MenuItem openWeatherFrame; 
    MenuItem exitApp; 

    public MainFrame() {    
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setTitle("Dashboad"); 
     this.setSize(1024, 768); 
     this.getContentPane().add(initDesktopPane()); 
     this.setMenuBar(initMenu()); 
     this.setVisible(true); 
    } 

    private JDesktopPane initDesktopPane() { 
     desktopPane = new JDesktopPane(); 
     return desktopPane; 
    } 

    private MenuBar initMenu() { 
     MenuBar menuBar = new MenuBar(); 
     Menu fileMenu = new Menu("File"); 
     openWeatherFrame = new MenuItem("Show Weatherforcast"); 
     openWeatherFrame.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       if(weatherIFrame == null) { 
        weatherIFrame = new WeatherIFrame(); 
        weatherIFrame.addInternalFrameListener(new InternalFrameListener() { 

         @Override 
         public void internalFrameOpened(InternalFrameEvent e) { 
         } 

         @Override 
         public void internalFrameClosing(InternalFrameEvent e) { 
         } 

         @Override 
         public void internalFrameClosed(InternalFrameEvent e) { 
          weatherIFrame = null; 
         } 

         @Override 
         public void internalFrameIconified(InternalFrameEvent e) { 
         } 

         @Override 
         public void internalFrameDeiconified(InternalFrameEvent e) { 
         } 

         @Override 
         public void internalFrameActivated(InternalFrameEvent e) { 
         } 

         @Override 
         public void internalFrameDeactivated(InternalFrameEvent e) { 
         } 
        }); 
        desktopPane.add(weatherIFrame); 
       } 

      } 
     });    
     fileMenu.add(openWeatherFrame); 
     menuBar.add(fileMenu); 
     return menuBar; 
    } 
} 

그리고 지금이 들어

import javax.swing.JInternalFrame; 

public class WeatherIFrame extends JInternalFrame { 

    public WeatherIFrame() { 
     this.setTitle("Weather"); 
     this.setSize(300, 200); 
     this.setVisible(true); 
     this.setClosable(true); 
     this.setResizable(true);   
    } 
} 

클래스를 확장, 실행합니다.

import de.professional_webworkx.dashboard.frame.MainFrame; 
import javax.swing.SwingUtilities; 

public class Dashboard { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new MainFrame(); 
      } 
     }); 
    }  
}