X
xABCDEx
Gast
Ich hatte vor als Test eine Klasse namens "Haus" zu schreiben. Zu dem Haus möchte ich zu jeder Zeit Fenster hinzufügen können und mit den einzelnen Fenstern dann arbeiten können.
Derzeit speichere ich alle Fenster die ich zeichne auch in einer ArrayList, sodass ich immer drauf zu greifen kann. Mein Problem ist das die Fenster nicht angezeigt werden. Methoden kann
ich ohne Probleme oder Fehler ausführen. Ich habe unten ein Beispiel, natürlich habe ich es verkürtzt.
Test.java
Haus.java
Fenster.java
Derzeit speichere ich alle Fenster die ich zeichne auch in einer ArrayList, sodass ich immer drauf zu greifen kann. Mein Problem ist das die Fenster nicht angezeigt werden. Methoden kann
ich ohne Probleme oder Fehler ausführen. Ich habe unten ein Beispiel, natürlich habe ich es verkürtzt.
Test.java
Java:
import javax.swing.*;
public class Test
{
private static final Haus haus = new Haus();
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
JFrame f = new JFrame("Haus");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500, 500);
f.setVisible(true);
f.add(haus);
this.FensterHinzufuegen();
}
private void FensterHinzufuegen()
{
haus.addFenster();
}
});
}
}
Haus.java
Java:
import java.util.ArrayList;
import javax.swing.*;
public class Haus extends JPanel
{
private ArrayList<Fenster> fenster = new ArrayList<Fenster>();
public Haus()
{
this.setFocusable(true);
//...
//Weitere Eigenschaften
}
public void addFenster()
{
//Neues Fenster zur ArrayList hinzufügen und dann das
//neu hinzugefügte Element welches sich in der ArrayList
//befindet auch als Komponente zeichnen
this.fenster.add(new Fenster());
this.add(getAktuellesFenster());
SwingUtilities.updateComponentTreeUI(getRootPane());
}
private Fenster getAktuellesFenster()
{
return(this.fenster.get(this.fenster.size() - 1));
}
public void oeffneFenster()
{
if(getAktuellesFenster() != null)
{
getAktuellesFenster().openf();
}
}
//...
//Weitere Methoden
}
Fenster.java
Java:
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class Fenster extends Haus
{
private BufferedImage fensterimg;
public Fenster()
{
//Bild laden
try
{
this.fensterimg = ImageIO.read(getClass().getResource("/bilder/fenster.png"));
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void openf()
{
//Fenster öffnen
//...
SwingUtilities.updateComponentTreeUI(getRootPane());
}
@Override
protected void paintComponent(Graphics g)
{
//Bild zeichnen
super.paintChildren(g);
if(this.fensterimg != null)
{
g.drawImage(this.fensterimg, 50, 50, this);
}
}
}