Visual – JDesktopPane – JInternalFrame – Multiple Document Interface – Java

Publicado: 2 de maio de 2014 em Java

Em interface gráfica do usuário (GUI), uma interface de documentos múltiplos, ou MDI, acrônimo para Multiple Document Interface é um método de organização de aplicações gráficas em janelas que residem em uma única janela, a janela principal da aplicação. A única exceção são possíveis janelas modais da aplicação.

Com múltiplas interfaces de documentos, uma única barra de menu e / ou barra de ferramentas é compartilhado entre todas as janelas filho, reduzindo a desordem e uma utilização mais eficiente do espaço na tela. As janelas filho de um aplicativo pode ser ocultada / mostrada / minimizada / maximizada como um todo. Os autores de aplicações multi-plataforma podem fornecer a seus usuários um comportamento consistente da aplicação entre plataformas.

Interface de Múltiplos Documentos

Interface de Múltiplos Documentos

JDesktopPane

É um recipiente utilizado para criar uma interface de documentos múltiplos ou uma área de trabalho virtual. Você cria objetos JInternalFrame e adicioná-los ao JDesktopPane. A classe JDesktopPane estende o  JLayeredPane para gerenciar os quadros internos potencialmente sobrepostos. Ele também mantém uma referência a uma instância de DesktopManager que é definido pela classe UI para o Look and Feel da aplicação.

JInternalFrame

Um objeto leve que fornece muitas das características de uma estrutura nativa, incluindo arrastar, fechar, mostrar um ícone, redimensionar, exibir títulos, e também possui suporte para uma barra de menus.

Exemplo:

Neste exemplo criamos um formulário MDI básico e um menu.

Java

Classe – Janela Pai


import javax.swing.JDesktopPane;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.JFrame;
import javax.swing.KeyStroke;

import java.awt.event.*;
import java.awt.*;


public class FormularioMdi extends JFrame implements ActionListener
{
	// Declara componetes
    JDesktopPane painel;

    public FormularioMdi() 
    {
    	// herda classe
    	super("Java - Formularios - MDI - JFrame / JDesktopPane / JInternalFrame");
        
    	// Define tamanho da janela principal
        int bordas = 50;
        Dimension tela = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(bordas, bordas, tela.width  - bordas *2 , tela.height - bordas *2);
        
        // Cria painel principal
        painel = new JDesktopPane(); 
        painel.setBackground(Color.LIGHT_GRAY);
                
        setContentPane(painel);
        setJMenuBar(createMenuBar());        
    }

    protected JMenuBar createMenuBar()
    {
    	// Cria barra de menu
        JMenuBar barra = new JMenuBar();
        
        // Cria menu
        JMenu menu = new JMenu("Formularios");        
        barra.add(menu);

        // Cria itens dos menus
        JMenuItem item = new JMenuItem("Novo");
        item.setActionCommand("novo");
        item.addActionListener(this);
        menu.add(item);

        //Cria segundo item
        item = new JMenuItem("Sair");
        item.setActionCommand("sair");
        item.addActionListener(this);
        menu.add(item);

        return barra;
    }

    
    public void actionPerformed(ActionEvent e) 
    {
    	// Cria eventos do menu
        if (e.getActionCommand() == "novo")
        { 
            criaFormulario();
        } 
        else 
        {
            sair();
        }
    }

    protected void sair() 
    {
    	// Fecha sistema
        System.exit(0);
    }
    
    protected void criaFormulario()
    {
    	// Cria formulario filho
    	FormularioFilho frame = new FormularioFilho();
        frame.setVisible(true); 
        
        // Adiciona janela filho na janela pai
        painel.add(frame);
        try 
        {
        	// Seta foco
            frame.setSelected(true);
        }
        catch (java.beans.PropertyVetoException e)        
        {
        	
        }
    }
       
    
    private static void criaGUI() 
    {     
    	// Decora barra da janela
    	JFrame.setDefaultLookAndFeelDecorated(true);

    	// Cria formulario filho     
        FormularioMdi formulario = new FormularioMdi();
        formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
        // Exibe formulario
        formulario.setVisible(true);
    }

    public static void main(String[] args)
    {
        javax.swing.SwingUtilities.invokeLater(new Runnable()
        {
            public void run() 
            {
            	// Chama GUI
                criaGUI();
            }
        });
    }
}

Classe – Janela Filho

import java.awt.Container;
import java.awt.Dimension;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class FormularioFilho extends JInternalFrame
{   
	// Declara componentes
	JLabel rotulo;
	JTextField campo;
	JButton botao;
	
	// Declara variaveis
	static int formulario = 0;
    static int posicao = 30;
    
    public FormularioFilho()
    {    	
    	// Herda da classe filho
    	super("Formulario Filho - Instancia :" + (++formulario), true, true, true, true);

    	// Cria painel
        setContentPane(criaPainel());
    	pack();
        
    	// Define posição do formulario
        setLocation(posicao * formulario, posicao * formulario);        
        
    }
    
    public Container criaPainel()
    {
    	// Cria painel
    	JPanel painel = new JPanel(); 
    	
    	// Define layout
    	painel.setLayout(new BoxLayout(painel, BoxLayout.PAGE_AXIS));
		painel.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
		
		// Cria componentes
		rotulo = new JLabel("Digite Seu nome:");
		campo = new JTextField();
		botao = new JButton("Ok");
		
		// define tamanho do campo
		campo.setPreferredSize(new Dimension(300,20));
		
		// Adiciona componentes ao painel	
		painel.add(rotulo);		
		painel.add(Box.createVerticalStrut(10));
		painel.add(campo);
		painel.add(Box.createVerticalStrut(20));
		painel.add(botao);
    	
    	return painel;
    }
    
    private static void criaGUI() 
    {
    	// Cria GUI (Janela Filho)
        JFrame.setDefaultLookAndFeelDecorated(true);
     
        FormularioMdi formulario = new FormularioMdi();
        formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
        // Exibe formulario
        formulario.setVisible(true);
    }

    public static void main(String[] args)
    {
        javax.swing.SwingUtilities.invokeLater(new Runnable()
        {
            public void run() 
            {
            	// Chama GUI
                criaGUI();
            }
        });
    }
}
Publicidade
comentários
  1. Rene disse:

    Ola. estou aprendendo java. Gostaria de saber como faço a barra inferior da janela onde aparece um botão correspondente a cada janela aberta? E como ao fechar a janela retirar esse botão da barra?

    • Olá Rene,

      O que vc procura se chama Status Bar, infelizmente o Java Swing não possui uma barra de status nativa, você precisa implementa-la,

      Você pode procurar por Status Bar no Google que achará varios exemplos de como implementa-la e como usar em janelas filhas, como não é um recutso nativo do Swing e sempre seguimos as documentações oficiais, não temos um exemplo neste blog.

      Espero ter ajudado,
      Abraço.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s