JInternalFrames von JDesktopFrame entfernen

Status
Nicht offen für weitere Antworten.

chrissy

Bekanntes Mitglied
Hi,

ich habe ein JDesktopPane (desktop), das mehrere MyInternalFrames (extends JInternalFrame) beinhaltet,
bevor ein neues MyInternalFrame hinzugefügt wird, prüfe ich, ob es bereits ein Frame mit diesem Namen gibt, wenn ja, dann wird es geschlossen, ansonsten werden die Frames minimiert.

Code:
Component[] outOpen = desktop.getComponents();
    for (int i = 0; i < desktop.getComponents().length; i++) 
    {
       // Frame nicht minimiert
       if (outOpen[i] instanceof MyInternalFrame)
       {
          if ( ((MyInternalFrame)outOpen[i]).getInternalName().equalsIgnoreCase(internalName) )
          {
            desktop.remove(outOpen[i]);
          }
          else 
          {
            try { ((MyInternalFrame)outOpen[i]).setIcon(true);}
            catch (PropertyVetoException e) {}
          }
       }
       // Frame bereits minimiert
       else if (outOpen[i] instanceof JInternalFrame.JDesktopIcon)
       {
         if ( ((JInternalFrame.JDesktopIcon)outOpen[i]).getName().equalsIgnoreCase(internalName) )
         {
           desktop.remove(outOpen[i]);
         }
       }
    }

Wenn MyInternalFrame nicht minimiert ist, funktioniert alles super. Im minimierten Zustand scheint mir das Frame zwar entfernt zu werden, aber der Button für das minimierte Frame wird nicht entfernt.
Was muss man tun, damit der Button auch noch entfernt wird?

Danke
chrissy
 
Ich hab das mal nachgestellt, seh aber auf den ersten Blick dein Problem nicht:
Code:
package desktop;
/*
 * TooltipInternalframe.java
 */
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.beans.PropertyVetoException;
public class InternalframeDemo extends JFrame {
    private JDesktopPane desktop;
    private MyInternalFrame internalFrame;
    private String internalName;
    private JToolBar toolbar;
    private JButton button;
    public InternalframeDemo() {
        super("Internalframe Demo");
        desktop = new JDesktopPane();
        internalFrame = new MyInternalFrame("JInternalFrame");
        internalFrame.setBounds(20,20,100,150);
        internalFrame.setIconifiable(true);
        internalFrame.setVisible(true);
        desktop.add(internalFrame);
        getContentPane().add( desktop, BorderLayout.CENTER );
        toolbar = new JToolBar();
        add(toolbar, BorderLayout.NORTH);
        button = new JButton("Test");
        toolbar.add(button);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                doButtonAction();
            }
        });
    }
    private void doButtonAction(){
        test("JInternalFrame");
        MyInternalFrame internalFrame = new MyInternalFrame("JInternalFrame");
        internalFrame.setBounds(200,20,100,150);
        internalFrame.setIconifiable(true);
        internalFrame.setVisible(true);
        desktop.add(internalFrame);
        desktop.repaint();
    }
    private void test(String internalName){
        Component[] outOpen = desktop.getComponents();
        for (int i = 0; i < desktop.getComponents().length; i++) {
            // Frame nicht minimiert
            if (outOpen[i] instanceof MyInternalFrame) {
                if ( ((MyInternalFrame)outOpen[i]).getInternalName().equalsIgnoreCase(internalName) ) {
                    desktop.remove(outOpen[i]);
                } else {
                    try { ((MyInternalFrame)outOpen[i]).setIcon(true);} catch (PropertyVetoException e) {}
                }
            }
            // Frame bereits minimiert
            else if (outOpen[i] instanceof JInternalFrame.JDesktopIcon) {
                if ( ((JInternalFrame.JDesktopIcon)outOpen[i]).getName().equalsIgnoreCase(internalName) ) {
                    desktop.remove(outOpen[i]);
                }
            }
        }
    }
    public static void main(final String[] args) {
        JFrame frame = new InternalframeDemo();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(new Dimension(400,300));
        frame.setVisible(true);
    }
}
class MyInternalFrame extends JInternalFrame{
    private String name;
    public MyInternalFrame(final String title){
        super(title);
        name = title;
        desktopIcon.setName(name);
    }
    public String getInternalName() {return name;}
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben