Question

I am testing some code that is using internal frame. So I don't wanna open the new internal frame that is already running in my program. I mean when I click a menu to open some internal frame that is already open in my outerframe, that internal frame may duplicate in my frame and how can I solve that case. Please.

Was it helpful?

Solution

here is a very simple example, hope it will help you.

I extended a JInternalFrame

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);        
    }
}

A Class, which generates the JFrame and contains the 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;
    }
}

And now, run it.

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();
            }
        });
    }    
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top