JInternalFrame

1 resposta
marcos_verd

oi
tenho mais um problema

eu tenho um JInternalFrame com um formulario e quando minimizar ele, eu queria que ao enves de ele parar no canto da tela ele fosse parar dentro da minha JToolBar

alguem pode me ajuda???

1 Resposta

discorpio

Boa tarde Marcos.

Voce terá que implementar a interface de eventos chamada “InternalFrameListener” e adicionar este ouvinte a cada JInternalFrame, vamos a um exemplo prático de um JFrame que criei neste momento:

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

public class FramePrincipal extends JFrame implements InternalFrameListener {
    
    private JToolBar toolbar = null;
    private JDesktopPane desktop = null;
    
    public static void main(String args[]){
        FramePrincipal fp = new FramePrincipal();
        fp.setVisible(true);
    }
    
    public FramePrincipal(){
        try {
            // Aqui configura um layout com uma GUI agradável
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setMinimumSize(new Dimension(400,400));
            initComponents();
            pack();
            setLocationRelativeTo(null);
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        } catch (InstantiationException ex) {
            ex.printStackTrace();
        } catch (IllegalAccessException ex) {
            ex.printStackTrace();
        } catch (UnsupportedLookAndFeelException ex) {
            ex.printStackTrace();
        }
    }
   
    private void initComponents(){
        setLayout(new BorderLayout());
        JMenuBar menubar = new JMenuBar();
        JMenu mnufile = new JMenu("Arquivo");
        JMenuItem mniopen = new JMenuItem("Abrir");
        mniopen.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                addFrame();
            }
        });
        mnufile.add(mniopen);
        menubar.add(mnufile);
        setJMenuBar(menubar);
        JPanel mf = new JPanel(new FlowLayout());
        desktop = new JDesktopPane();
        desktop.setPreferredSize(new Dimension(400,300));
        mf.add(desktop);
        getContentPane().add(mf, BorderLayout.CENTER);
        toolbar = new JToolBar();
        getContentPane().add(toolbar, BorderLayout.SOUTH);
        
    }
    
    // Método para adicionar JInternalFrames
    private void addFrame(){
        JInternalFrame frame = new JInternalFrame("TesteFrame",true,true,true,true);
        frame.setPreferredSize(new Dimension(200,100));
        frame.addInternalFrameListener(this);
        frame.setVisible(true);
        desktop.add(frame);
        frame.pack();
    }
    
    // Este evento é disparado quando o JInternalFrame é aberto, por enquanto não o utilizaremos
    @Override
    public void internalFrameOpened(InternalFrameEvent e) {
       // throw new UnsupportedOperationException("Not supported yet.");
    }
    
    // Este evento é disparado quando o JInternalFrame está fechando, por enquanto não o utilizaremos
    @Override
    public void internalFrameClosing(InternalFrameEvent e) {
      //  throw new UnsupportedOperationException("Not supported yet.");
    }
    
    // Este evento é disparado quando o JInternalFrame acabou de fechar, por enquanto não o utilizaremos
    @Override
    public void internalFrameClosed(InternalFrameEvent e) {
      //  throw new UnsupportedOperationException("Not supported yet.");
    }

    // Este evento é disparado quando o JInternalFrame é iconizado, vamos utilizá-lo
    @Override
    public void internalFrameIconified(InternalFrameEvent e) {
        JInternalFrame frame = (JInternalFrame)e.getSource();
        toolbar.add(frame.getDesktopIcon());
    }
    
    // Este evento é disparado quando o JInternalFrame volta ao estado anterior, vamos utilizá-lo
    @Override
    public void internalFrameDeiconified(InternalFrameEvent e) {
       JInternalFrame frame = (JInternalFrame)e.getSource();
       toolbar.remove(frame.getDesktopIcon());
       desktop.add(frame);
    }

    // Este evento é disparado quando o JInternalFrame ganha o foco, por enquanto não o utilizaremos
    @Override
    public void internalFrameActivated(InternalFrameEvent e) {
       // throw new UnsupportedOperationException("Not supported yet.");
    }
    
    // Este evento é disparado quando o JInternalFrame perde o foco, por enquanto não o utilizaremos
    @Override
    public void internalFrameDeactivated(InternalFrameEvent e) {
      //  throw new UnsupportedOperationException("Not supported yet.");
    }

}

Teste ai, e depois posta aqui o resultado.

Criado 16 de setembro de 2011
Ultima resposta 17 de set. de 2011
Respostas 1
Participantes 2