JInternalFrame

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???

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.