Hallo, ich schreibe zurzeit an einem kleinen mal programm und habe mal wieder ein kleines problem...
habe es nun endlich hinbekommen, dass die shapes die in zwei LinkedList<Object[]> aufgeteilt sind (nach fuellen oder nur außenlinie zeichnen) in ein array getan wird um die richtige farbe noch zu zuweisen.
Nur leider, liegen jetzt die nicht gefuellten immer unter den gefuellten shapes weil ich mit for each nach einander durch beide iteriere. Aszug des Probs aus der paintCommponent() - Methode :
[Java]
Object[] obj = {g2d.getColor(), rect};
if(DrawOrFill == 0){
g2d.draw(rect);
drawed.add(obj);
}
if(DrawOrFill == 1){
g2d.fill(rect);
filled.add(obj);
}
for(Object[] obj : drawed){
Color clr = (Color) obj[0];
Shape s = (Shape) obj[1];
g2d.setColor(clr);
Rectangle2D.Float rec = (Rectangle2D.Float) s;
g2d.draw(rec);
}
for(Object[] obj : filled){
Color clr = (Color) obj[0];
Shape s = (Shape) obj[1];
g2d.setColor(clr);
Rectangle2D.Float rec = (Rectangle2D.Float) s;
g2d.fill(rec);
}
[/Java]
Wie koennte ich das besser und ueberhaupt richtig machen ?^^
Noch nen drittes objekt in das array, welches den index des Shape-Objects speichert ??
[Java]
Object[] obj = {g2d.getColor(), rect, count};
if(DrawOrFill == 0){
g2d.draw(rect);
drawed.add(obj);
}
if(DrawOrFill == 1){
g2d.fill(rect);
filled.add(obj);
}
count++;
for(int i = 0; i < (drawed.size() + filled.size()); i++){
if(drawed.get(i)[2] == i){ // Beim Fuellen, IndexOutOfBound 3; Außenlinien gehen
if(drawed.get(i) != null){
Object obj[] = drawed.get(i);
Color clr = (Color) obj[0];
Shape s = (Shape) obj[1];
g2d.setColor(clr);
Rectangle2D.Float rec = (Rectangle2D.Float) s;
g2d.draw(rec);
}
}
else if(filled.get(i)[2] == i){
if(filled.get(i) != null){
Object obj[] = filled.get(i);
Color clr = (Color) obj[0];
Shape s = (Shape) obj[1];
g2d.setColor(clr);
Rectangle2D.Float rec = (Rectangle2D.Float) s;
g2d.fill(rec);
}
}
}
[/Java]
Bekomme es gerade iwie echt nicht hin...
hab einen fehler beim 2. eben erkannt, klar ist i zu groß, wenn ich dann von drawed auf filled wechsele... gerade echt ka mehr zu viel den kopf heute an dem prog zerbrochen ^^
wie wuerdet ihr vorgehen/es lösen ?
habe es nun endlich hinbekommen, dass die shapes die in zwei LinkedList<Object[]> aufgeteilt sind (nach fuellen oder nur außenlinie zeichnen) in ein array getan wird um die richtige farbe noch zu zuweisen.
Nur leider, liegen jetzt die nicht gefuellten immer unter den gefuellten shapes weil ich mit for each nach einander durch beide iteriere. Aszug des Probs aus der paintCommponent() - Methode :
[Java]
Object[] obj = {g2d.getColor(), rect};
if(DrawOrFill == 0){
g2d.draw(rect);
drawed.add(obj);
}
if(DrawOrFill == 1){
g2d.fill(rect);
filled.add(obj);
}
for(Object[] obj : drawed){
Color clr = (Color) obj[0];
Shape s = (Shape) obj[1];
g2d.setColor(clr);
Rectangle2D.Float rec = (Rectangle2D.Float) s;
g2d.draw(rec);
}
for(Object[] obj : filled){
Color clr = (Color) obj[0];
Shape s = (Shape) obj[1];
g2d.setColor(clr);
Rectangle2D.Float rec = (Rectangle2D.Float) s;
g2d.fill(rec);
}
[/Java]
Wie koennte ich das besser und ueberhaupt richtig machen ?^^
Noch nen drittes objekt in das array, welches den index des Shape-Objects speichert ??
[Java]
Object[] obj = {g2d.getColor(), rect, count};
if(DrawOrFill == 0){
g2d.draw(rect);
drawed.add(obj);
}
if(DrawOrFill == 1){
g2d.fill(rect);
filled.add(obj);
}
count++;
for(int i = 0; i < (drawed.size() + filled.size()); i++){
if(drawed.get(i)[2] == i){ // Beim Fuellen, IndexOutOfBound 3; Außenlinien gehen
if(drawed.get(i) != null){
Object obj[] = drawed.get(i);
Color clr = (Color) obj[0];
Shape s = (Shape) obj[1];
g2d.setColor(clr);
Rectangle2D.Float rec = (Rectangle2D.Float) s;
g2d.draw(rec);
}
}
else if(filled.get(i)[2] == i){
if(filled.get(i) != null){
Object obj[] = filled.get(i);
Color clr = (Color) obj[0];
Shape s = (Shape) obj[1];
g2d.setColor(clr);
Rectangle2D.Float rec = (Rectangle2D.Float) s;
g2d.fill(rec);
}
}
}
[/Java]
Bekomme es gerade iwie echt nicht hin...
hab einen fehler beim 2. eben erkannt, klar ist i zu groß, wenn ich dann von drawed auf filled wechsele... gerade echt ka mehr zu viel den kopf heute an dem prog zerbrochen ^^
wie wuerdet ihr vorgehen/es lösen ?
Zuletzt bearbeitet: