Ich erstelle per
ein neuens Fenster welches von JFrame abgeleitet ist. Darauf befindet sich ein JPanel.
Auf diesem möchte ich dann gerne Elemente in Form von JButtons anzeigen und diese mittels Linien verbinden. Die JButtons werden in einem anderen Objekt als static ArrayList "angeboten" (Im Folgenden Quellcode die Variable Knoten). Die Linien werden beim Zeichnen Ermittelt.
Nun habe ich folgendes Problem: Öffne ich das Fenster das erste mal, funktioniert Alles einwandfrei, schließe ich es und öffne es dann erneut, wird zunächst Alles korrekt dargestellt. Möchte ich jedoch neue Verbindungslinien erstellen werden diese nicht angezeigt (repaint wird ignoriert). Jede andere Aktion ruft repaint immer noch korrekt auf.
Das JPanel besitzt folgende Paint Methode:
Kanten werden hinzugefügt in dem man einen Knoten anklickt und dann mit gedrückter maustaste zum Zielknoten fährt.
Code:
new Fenster()
ein neuens Fenster welches von JFrame abgeleitet ist. Darauf befindet sich ein JPanel.
Auf diesem möchte ich dann gerne Elemente in Form von JButtons anzeigen und diese mittels Linien verbinden. Die JButtons werden in einem anderen Objekt als static ArrayList "angeboten" (Im Folgenden Quellcode die Variable Knoten). Die Linien werden beim Zeichnen Ermittelt.
Nun habe ich folgendes Problem: Öffne ich das Fenster das erste mal, funktioniert Alles einwandfrei, schließe ich es und öffne es dann erneut, wird zunächst Alles korrekt dargestellt. Möchte ich jedoch neue Verbindungslinien erstellen werden diese nicht angezeigt (repaint wird ignoriert). Jede andere Aktion ruft repaint immer noch korrekt auf.
Das JPanel besitzt folgende Paint Methode:
Code:
public void paint(Graphics g)
{
g.setColor(Color.WHITE);
g.fillRect(0, 0, this.getSize().width, this.getSize().height);
g.setColor(Color.BLACK);
ArrayList<Knoten> nachf;
for(int i=0;i<knoten.size();i++)
{
knoten.get(i).setBounds(knoten.get(i).getpos().x, knoten.get(i).getpos().y, 100, 50);
this.add(knoten.get(i));
knoten.get(i).repaint();
nachf=knoten.get(i).getNachf();
for(int j=0;j<nachf.size();j++)
{
g.drawLine(knoten.get(i).getLocation().x+100,knoten.get(i).getLocation().y+25,nachf.get(j).getLocation().x,nachf.get(j).getLocation().y+25);
}
}
}
Kanten werden hinzugefügt in dem man einen Knoten anklickt und dann mit gedrückter maustaste zum Zielknoten fährt.
Code:
public void mouseReleased(MouseEvent e) {
if(e.getButton()==1)
{
zf.setKante((Knoten)e.getSource(),e.getPoint());
zf.repaint();
}
}
Code:
public void setKante(Knoten k, Point p)
{
for(int i=0;i<knoten.size();i++)
{
if(p.x+k.getpos().x>=knoten.get(i).getpos().x && p.x+k.getpos().x<=knoten.get(i).getpos().x+100 && p.y+k.getpos().y>=knoten.get(i).getpos().y && p.y+k.getpos().y<=knoten.get(i).getpos().y+50)
{
k.setNachf(knoten.get(i));
}
}
}