This Java Swing tip illustrates quick demonstration of setting up an internal frame in an application. Developers may note that each internal frame comes up 30 pixels lower and to the right of the place where the previous internal frame first appeared. This functionality is implemented in the MyInternalFrame class, which is the custom subclass of JInternalFrame.

 import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SimpleInternalFrame extends Frame {
    
    JButton openButton, macButton, javaButton, motifButton, winButton;
    JLayeredPane desktop;
    JInternalFrame internalFrame;
    
    public SimpleInternalFrame() {

        super("Internal Frame Demo");
        setSize(500,400);
        openButton = new JButton("Open");
        macButton = new JButton("Mac");
        javaButton = new JButton("Metal");
        motifButton = new JButton("Motif");
        winButton = new JButton("Windows");
        Panel p = new Panel();
        p.add(openButton);
        p.add(macButton);
        p.add(javaButton);
        p.add(motifButton);
        p.add(winButton);
        add(p, BorderLayout.SOUTH);

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        openButton.addActionListener(new OpenListener());
        LnFListener lnf = new LnFListener(this);
        macButton.addActionListener(lnf);
        javaButton.addActionListener(lnf);
        motifButton.addActionListener(lnf);
        winButton.addActionListener(lnf);
        
        // Set up the layered pane
        desktop = new JDesktopPane();
        desktop.setOpaque(true);
        add(desktop, BorderLayout.CENTER);

    }
    
    // An inner class to handle presses of the Open button
    class OpenListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {

            if ((internalFrame == null) || (internalFrame.isClosed())) {
                internalFrame = new JInternalFrame("Internal Frame",
                        true, true, true, true);
                internalFrame.setBounds(50, 50, 200, 100);
                desktop.add(internalFrame, new Integer(1));
                internalFrame.setVisible(true);
            }

        }
    }
    
    public static void main(String args[]) {

        SimpleInternalFrame sif = new SimpleInternalFrame();
        sif.setVisible(true);
    }
}