Calling a JInternalFrame from a JDialog

Yesterday, my friend Iswi asked me a question, how can she called a JinternalFrame from a JDialog, and put it in an existing JDesktopPane? Well Iswi, here are your answers.

First i create a very simple JFrame application

package com.edw.ui;

import java.awt.BorderLayout;
import java.awt.Container;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;

import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import org.apache.log4j.Logger;

/**
 *
 * @author edw
 */
public class FrameMain extends JFrame implements ActionListener {

    private JDesktopPane desktopPane = new JDesktopPane();
    private JMenuBar jMenuBar = new JMenuBar();
    private JMenu menuTest = new JMenu("Test");
    private JMenuItem jMenuItem = new JMenuItem("execute");
    private Logger logger = Logger.getLogger(this.getClass());

    public FrameMain() {
        Container con = getContentPane();  
        con.setLayout(new BorderLayout());
        con.add(desktopPane, BorderLayout.CENTER);

        menuTest.add(jMenuItem);
        jMenuBar.add(menuTest);

        setJMenuBar(jMenuBar);

        jMenuItem.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == jMenuItem) {
            logger.debug("in jmenuitem");
            InternalTestOne internalTestSatu = new InternalTestOne(this);
            internalTestSatu.setVisible(true);
            getDesktopPane().add(internalTestSatu);
        }
    }

    public static void main(String[] args) {
        FrameMain frameMain = new FrameMain();
        frameMain.setVisible(true);
        frameMain.setLocationRelativeTo(null);        
        frameMain.setSize(800, 500);
        frameMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frameMain.setTitle("bubu");
    }

    public JDesktopPane getDesktopPane() {
        return desktopPane;
    }

    public void setDesktopPane(JDesktopPane desktopPane) {
        this.desktopPane = desktopPane;
    }
}

and this is my first JInternalFrame, it will call a JDialog class,

package com.edw.ui;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;

import javax.swing.JInternalFrame;
import org.apache.log4j.Logger;

/**
 *
 * @author edw
 */
public class InternalTestOne extends JInternalFrame implements ActionListener {

    private Logger logger = Logger.getLogger(this.getClass());
    private JButton button = new JButton("Klik Dialog");
    private FrameMain frameMain = new FrameMain();

    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == button){
            logger.debug("in ActionPerformed InternalTestSatu");

            // show jdialog
            DialogTest dialogTest = new DialogTest(frameMain);
            dialogTest.setVisible(true);
        }
    }

    public InternalTestOne(FrameMain frameMain) {
        super("internal satu", true, true, true, true);
        this.frameMain = frameMain;
        setSize(300,300);
        logger.debug("in InternalTestSatu");

        Container con = getContentPane();
        con.setLayout(new FlowLayout());
        con.add(button);
        button.addActionListener(this);
    }

}

and this is my JDialog class

package com.edw.ui;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;

import org.apache.log4j.Logger;

/**
 *
 * @author edw
 */
public class DialogTest extends JDialog implements ActionListener {

    private JButton button = new JButton("call Internal Frame");
    private Logger logger = Logger.getLogger(this.getClass());
    private FrameMain frameMain = new FrameMain();

    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == button){
            logger.debug("at actionPerformed "+this.getClass().getName());

            // call jinternalframe from here           
            InternalTestTwo internalTestTwo = new InternalTestTwo();
            internalTestTwo.setVisible(true);
            frameMain.getDesktopPane().add(internalTestTwo);
            this.setVisible(false);
            this.dispose();
        }
    }

    public DialogTest(FrameMain frameMain) {
        super(frameMain);
        this.frameMain = frameMain;
        setTitle("Calling JInternalFrame");
        Container con = getContentPane();
        con.setLayout(new FlowLayout());
        con.add(button);
        setLocationRelativeTo(null);
        setSize(300,200);
        pack();
        button.addActionListener(this);
    }

}

and finally, this is my second JInternalFrame , it will be called from a JDialog

package com.edw.ui;

import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import org.apache.log4j.Logger;

/**
 *
 * @author edw
 */
public class InternalTestTwo extends JInternalFrame {

    private JLabel label = new JLabel("Called from JDialog");
    private Logger logger = Logger.getLogger(this.getClass());

    public InternalTestTwo() {
        super("internal Two Called from JDialog", true, true, true, true);
        setSize(300, 300);
        setLocation(100,200);
        logger.debug("constructor of "+this.getClass().getName());

        Container con = getContentPane();
        con.setLayout(new FlowLayout());
        con.add(label);
    }
}

and this is how my simple app looks like,

Thanks for your questions, Iswi. Always remember, stay hungry, stay foolish.
:-[

Google+

No Comments

Leave a Comment

Please be polite. We appreciate that.
Your email address will not be published and required fields are marked


:-[ (B) (^) (P) (@) (O) (D) :-S ;-( (C) (&) :-$ (E) (~) (K) (I) (L) (8) :-O (T) (G) (F) :-( (H) :-) (*) :-D (N) (Y) :-P (U) (W) ;-)