Hi ..komme ganz gut weiter mit meiner MDI-Applikation. Habe noch ne kleine Frage...Wenn ich ein internes Fenster
schließe, dann wird das Object ja nicht wirklich zerstört..sondern nur Minimiert, invisibliert und deselektiert!!
Es ist aber ja noch im Speicher vorhanden....nun wenn ich aber mehrere interne Fenster aufhabe und eins schließe und dann kommt wieder ein neues hinzu....dann muesste ich ja jedesmal fragen, welche Objekte bereits existieren, anstatt
einfach eine neue instanz zu erstellen! Weiss jemand wie ich ein internes Fenster nicht nur schließe..sondern auch
komplett lösche etc... ?
Hier mein Internes Fenster: (Um die gehts!)
Hier mein ParentWindow
Hier die Main-Routine
..Ich erstelle hier ja 2 Instanzen für 2 interne Fenster. Wenn ich jetzt eins schließe und will wieder ein neues hinzufügen..dann hätte ich ja 2 aktive und ein inaktives. Müsste ja sonst jedesmal prüfen, welche instanzen existieren ? Oder mir ein vordefiniertes Array mit internen Fenstern und counter machen ?
Vielleicht könnt ihr mir helfen, weil ich bin neu in der Swing-Scene (seit einem Tag) und muss mich erstmal da reinarbeiten. Hatte vorher halt nur mir C tun ;-)
Gruss und vielen Dank im vorraus
Finalbrain
schließe, dann wird das Object ja nicht wirklich zerstört..sondern nur Minimiert, invisibliert und deselektiert!!
Es ist aber ja noch im Speicher vorhanden....nun wenn ich aber mehrere interne Fenster aufhabe und eins schließe und dann kommt wieder ein neues hinzu....dann muesste ich ja jedesmal fragen, welche Objekte bereits existieren, anstatt
einfach eine neue instanz zu erstellen! Weiss jemand wie ich ein internes Fenster nicht nur schließe..sondern auch
komplett lösche etc... ?
Hier mein Internes Fenster: (Um die gehts!)
Code:
import javax.swing.*;
import javax.swing.event.*;
class InternWindow extends JInternalFrame implements InternalFrameListener
{
private JPanel panel;
private static int winCounter = 1;
public InternWindow(String title)
{
super("Projekt"+Integer.toString(winCounter++)+ " >> " + title,true,true,true,true);
panel = new JPanel();
this.getContentPane().add(panel);
this.setSize(256,256);
this.setVisible(true);
this.addInternalFrameListener(this);
}
private JPanel getPanel()
{
return panel;
}
// ***** Window EventHandling INTERN *********
public void internalFrameActivated(InternalFrameEvent e) {};
public void internalFrameClosed(InternalFrameEvent e){}
public void internalFrameDeactivated(InternalFrameEvent e) {}
public void internalFrameDeiconified(InternalFrameEvent e) {}
public void internalFrameIconified(InternalFrameEvent e) {}
public void internalFrameOpened(InternalFrameEvent e) {}
public void internalFrameClosing(InternalFrameEvent e)
{
JOptionPane.showMessageDialog(null, "Internes Fenster geschlossen",
"System", JOptionPane.ERROR_MESSAGE);
winCounter--;
ParentWindow.internRelativeX-=64;
ParentWindow.internRelativeX+=64;
}
}
Hier mein ParentWindow
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ParentWindow extends JFrame implements WindowListener
{
private JDesktopPane desktop;
public static int internRelativeX=0;
public static int internRelativeY=0;
public ParentWindow(String title)
{
super(title);
desktop = new JDesktopPane();
//this.setResizable(false);
this.setSize(512,386);
this.getContentPane().add(desktop);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.addWindowListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void addInternWindow(InternWindow intWin)
{
desktop.add(intWin);
intWin.setLocation(internRelativeX,internRelativeY);
internRelativeX+=64;
internRelativeY+=64;
try
{
intWin.setSelected(true);
}
catch(Exception e)
{
}
}
// ***** Window EventHandling *********
public void windowActivated(WindowEvent e) { }
public void windowClosed(WindowEvent e) { }
public void windowDeactivated(WindowEvent e){}
public void windowDeiconified(WindowEvent e) { }
public void windowIconified(WindowEvent e) { }
public void windowOpened(WindowEvent e) { }
public void windowClosing(WindowEvent e)
{
JOptionPane.showMessageDialog(null, "Programm wird geschlossen",
"System", JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
}
Hier die Main-Routine
Code:
import javax.swing.*;
public class MainWin
{
private static void createAndShowGUI()
{
JFrame.setDefaultLookAndFeelDecorated(true);
ParentWindow pw = new ParentWindow("Applikation (C) Finalbrain");
pw.addInternWindow(new InternWindow("c:\\A.bmp"));
pw.addInternWindow(new InternWindow("c:\\B.bmp"));
}
//Threadsafity!
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(
new Runnable()
{
public void run()
{
createAndShowGUI();
}
}
);
}
}
..Ich erstelle hier ja 2 Instanzen für 2 interne Fenster. Wenn ich jetzt eins schließe und will wieder ein neues hinzufügen..dann hätte ich ja 2 aktive und ein inaktives. Müsste ja sonst jedesmal prüfen, welche instanzen existieren ? Oder mir ein vordefiniertes Array mit internen Fenstern und counter machen ?
Vielleicht könnt ihr mir helfen, weil ich bin neu in der Swing-Scene (seit einem Tag) und muss mich erstmal da reinarbeiten. Hatte vorher halt nur mir C tun ;-)
Gruss und vielen Dank im vorraus
Finalbrain