moin,
ich versuche einen SchwarzRotBaum aufm Panel darzustellen, dafür funktioniert das Algorithm wenn ich mit System.out.println debuge, aber aufm Panel zeichne ich jedes mal vom Root bis zum letzen Knoten, das macht die Methode refresh ,die repaint ruft um einen Knoten als kreis mit einer Zahl in der mitte und eine linie zwischen den Knoten. aber auf Panel zeichnet nicht richtig.
wie kann ich es richtig machen
ich danke euch.
ich versuche einen SchwarzRotBaum aufm Panel darzustellen, dafür funktioniert das Algorithm wenn ich mit System.out.println debuge, aber aufm Panel zeichne ich jedes mal vom Root bis zum letzen Knoten, das macht die Methode refresh ,die repaint ruft um einen Knoten als kreis mit einer Zahl in der mitte und eine linie zwischen den Knoten. aber auf Panel zeichnet nicht richtig.
wie kann ich es richtig machen
ich danke euch.
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
public class Draw extends JPanel{
private int x,y,h,abstand; //Position
private String data;
private Color farbe;
private boolean isRoot;
public Draw(String data){
this.setPreferredSize(new Dimension(1200,getSize().height-40));
this.setBorder(BorderFactory.createMatteBorder(4, 4, 4, 4, Color.black));
this.data = data;
}
public void refrech(Knoten n){
x = n.getX();
y = n.getY();
System.out.println("x: "+x+" y: "+y+" elt "+n.getData());
data = ""+n.getData();
abstand = n.getlORr()*n.getAbstand();
farbe = n.getFarbe();
isRoot = Baum.isRoot;
h = Baum.h;
repaint();//REPAINT
//revalidate();
int a = x-abstand+15,b = y-h+30, c =x+15;
System.out.println(data+" x1 "+a+" y1 "+b+" x2 "+c+" y2 "+y);
if(n.linkesKind != null){
n = n.linkesKind;
System.out.println("iflinkrefrech "+n.getData()+" "+n.getX()+","+n.getY()+" "+n.getFarbe());
refrech(n);
}
if(n.rechtesKind != null){
n = n.rechtesKind;
System.out.println("ifrechtrefrech "+n.getData()+" "+n.getX()+","+n.getY()+" "+n.getFarbe());
refrech(n);
}
}
public void paintComponent(Graphics g){
if(Baum.neuElt ){
g.setColor(farbe);
g.fillOval(x, y, 30, 30);
g.setColor(Color.WHITE);
g.drawString(data, x+10, y+10);
if(!isRoot){
g.setColor(Color.black);
g.drawLine(x-abstand+15, y-h+30, x+15, y);
}
}
}
}