Hallo,
ich schreibe an einem Programm in welchem in ein JPanel verschiedene Objekte gezeichnet werden
können z.B. Kreise, Rechtecke etc.
Diese Objekte können über Linien miteinander verbunden werden.
Es soll möglich sein mehrere Kreise und Rechtecke gleichzeitig verschieben zu können, wobei
die Linien dementsprechend verlängert oder verkürzt werden.
Mein Programm funktioniert fehlerfrei wenn ich nur ein Objekt verschiebe, versuche ich mehrere Objekte
zu verschieben, so lassen sich zwar alle ausgewählten Objekte verschieben, aber nicht alle Verbindungs-
linien bewegen sich mit.
Anbei die relevanten Code-Abschnitte:
Hat irgendjemand schon mal ein ähnliches Problem gehabt? Ich sitze seit heute Vormittag daran und
kann den Fehler einfach nicht finden.
ich schreibe an einem Programm in welchem in ein JPanel verschiedene Objekte gezeichnet werden
können z.B. Kreise, Rechtecke etc.
Diese Objekte können über Linien miteinander verbunden werden.
Es soll möglich sein mehrere Kreise und Rechtecke gleichzeitig verschieben zu können, wobei
die Linien dementsprechend verlängert oder verkürzt werden.
Mein Programm funktioniert fehlerfrei wenn ich nur ein Objekt verschiebe, versuche ich mehrere Objekte
zu verschieben, so lassen sich zwar alle ausgewählten Objekte verschieben, aber nicht alle Verbindungs-
linien bewegen sich mit.
Anbei die relevanten Code-Abschnitte:
Java:
//zu verschiebenden Elemente werden gekennzeichnet mit gelb
if(model.getVerschKenn()) {
for(int i=0; i < model.Trans_Array.size(); i++) {
if(x >= model.Trans_Array.get(i).trans_x_kor &&
x <= model.Trans_Array.get(i).trans_x_kor+groesseWidth &&
y >= model.Trans_Array.get(i).trans_y_kor &&
y <= model.Trans_Array.get(i).trans_y_kor+groesseHeight) {
model.Trans_Array.get(i).versch_kenn = true;
}
}
for(int j=0; j < model.Stellen_Array.size(); j++) {
if(x >= model.Stellen_Array.get(j).stelle_x_kor && x
<= model.Stellen_Array.get(j).stelle_x_kor+groesseWidth &&
y >= model.Stellen_Array.get(j).stelle_y_kor &&
y <= model.Stellen_Array.get(j).stelle_y_kor+groesseHeight) {
model.Stellen_Array.get(j).versch_kenn = true;
}
}
repaint();
}
Java:
//mehrere Elemente, welche zuvor gelb gekennzeichnet wurden, werden jetzt gleichzeitig verschoben
if(model.getMehrVerschieben()) {
for(int i=0; i < model.Trans_Array.size(); i++) {
if(x >= model.Trans_Array.get(i).trans_x_kor &&
x <= model.Trans_Array.get(i).trans_x_kor+groesseWidth &&
y >= model.Trans_Array.get(i).trans_y_kor &&
y <= model.Trans_Array.get(i).trans_y_kor+groesseHeight &&
model.Trans_Array.get(i).versch_kenn) {
xOffset = x - model.Trans_Array.get(i).trans_x_kor;
yOffset = y - model.Trans_Array.get(i).trans_y_kor;
merke = i;
schiebtTransition = true;
schiebtStelle = false;
model.VerschElem_Array.add(new VerschiebenElemente(merke, 1, 0, 0));
for(int q=0; q < model.Trans_Array.size(); q++) {
if(q == i) {
//do nothing
} else if(model.Trans_Array.get(q).versch_kenn) {
int zahl1 = model.Trans_Array.get(merke).trans_x_kor -
model.Trans_Array.get(q).trans_x_kor;
int zahl2 = model.Trans_Array.get(merke).trans_y_kor -
model.Trans_Array.get(q).trans_y_kor;
model.VerschElem_Array.add(new VerschiebenElemente(q, 1, zahl1, zahl2));
}
}
for(int q=0; q < model.Stellen_Array.size(); q++) {
if(model.Stellen_Array.get(q).versch_kenn) {
int zahl1 = model.Trans_Array.get(merke).trans_x_kor -
model.Stellen_Array.get(q).stelle_x_kor;
int zahl2 = model.Trans_Array.get(merke).trans_y_kor -
model.Stellen_Array.get(q).stelle_y_kor;
model.VerschElem_Array.add(new VerschiebenElemente(q, 2, zahl1, zahl2));
}
}
}
}
for(int i=0; i < model.Stellen_Array.size(); i++) {
if(x >= model.Stellen_Array.get(i).stelle_x_kor &&
x <= model.Stellen_Array.get(i).stelle_x_kor+groesseWidth &&
y >= model.Stellen_Array.get(i).stelle_y_kor &&
y <= model.Stellen_Array.get(i).stelle_y_kor+groesseHeight&&
model.Stellen_Array.get(i).versch_kenn) {
xOffset = x - model.Stellen_Array.get(i).stelle_x_kor;
yOffset = y - model.Stellen_Array.get(i).stelle_y_kor;
merke = i;
schiebtTransition = false;
schiebtStelle = true;
model.VerschElem_Array.add(new VerschiebenElemente(merke, 2, 0, 0));
for(int q=0; q < model.Stellen_Array.size(); q++) {
if(q == i) {
//do nothing
} else if(model.Stellen_Array.get(q).versch_kenn) {
int zahl1 = model.Stellen_Array.get(merke).stelle_x_kor -
model.Stellen_Array.get(q).stelle_x_kor;
int zahl2 = model.Stellen_Array.get(merke).stelle_y_kor -
model.Stellen_Array.get(q).stelle_y_kor;
model.VerschElem_Array.add(new VerschiebenElemente(q, 2, zahl1, zahl2));
}
}
for(int q=0; q < model.Trans_Array.size(); q++) {
if(model.Trans_Array.get(q).versch_kenn) {
int zahl1 = model.Stellen_Array.get(merke).stelle_x_kor -
model.Trans_Array.get(q).trans_x_kor;
int zahl2 = model.Stellen_Array.get(merke).stelle_y_kor -
model.Trans_Array.get(q).trans_y_kor;
model.VerschElem_Array.add(new VerschiebenElemente(q, 1, zahl1, zahl2));
}
}
}
}
//repaint in MouseDragged
}
Java:
} else if (model.getMehrVerschieben()) {
for(int p=0; p < model.VerschElem_Array.size(); p++) {
z_trans.clear();
v_trans.clear();
z_stelle.clear();
v_stelle.clear();
if(model.VerschElem_Array.get(p).Sorte == 1) {
int abstandX = model.VerschElem_Array.get(p).AbstandX;
int abstandY = model.VerschElem_Array.get(p).AbstandY;
model.Trans_Array.set(model.VerschElem_Array.get(p).Pos,
(new Transition(
e.getX()- abstandX - xOffset,
e.getY() - abstandY - yOffset,
model.Trans_Array.get(p).trans_laenge,
model.Trans_Array.get(p).trans_breite,
model.Trans_Array.get(p).trans_color,
model.Trans_Array.get(p).text,
model.Trans_Array.get(p).trans_aktiv,
true)));
for(int r=0; r < model.Verb_Array.size(); r++) {
if(model.Verb_Array.get(r).von_Trans &&
model.Verb_Array.get(r).zu_Stelle &&
model.Verb_Array.get(r).index_Trans == p) {
v_trans.add(r);
} else if(model.Verb_Array.get(r).zu_Trans &&
model.Verb_Array.get(r).von_Stelle &&
model.Verb_Array.get(r).index_Trans == p ) {
z_trans.add(r);
}
}
if(v_trans.size() > 0) {
for(int s=0; s < v_trans.size(); s++) {
int in = v_trans.get(s);
model.Verb_Array.set(in, new Verbindung(
model.Trans_Array.get(p).trans_x_kor+(groesseWidth/2),
model.Trans_Array.get(p).trans_y_kor+(groesseHeight/2),
model.Verb_Array.get(in).xEnde,
model.Verb_Array.get(in).yEnde,
model.Verb_Array.get(in).color,
model.Verb_Array.get(in).von_Trans,
model.Verb_Array.get(in).von_Stelle,
model.Verb_Array.get(in).zu_Trans,
model.Verb_Array.get(in).zu_Stelle,
model.Verb_Array.get(in).index_Trans,
model.Verb_Array.get(in).index_Stelle));
repaint();
}
}
if(z_trans.size() > 0) {
for(int s=0; s < z_trans.size(); s++) {
int in = z_trans.get(s);
model.Verb_Array.set(in, new Verbindung(
model.Verb_Array.get(in).xAnfang,
model.Verb_Array.get(in).yAnfang,
model.Trans_Array.get(p).trans_x_kor+(groesseWidth/2),
model.Trans_Array.get(p).trans_y_kor+(groesseHeight/2),
model.Verb_Array.get(in).color,
model.Verb_Array.get(in).von_Trans,
model.Verb_Array.get(in).von_Stelle,
model.Verb_Array.get(in).zu_Trans,
model.Verb_Array.get(in).zu_Stelle,
model.Verb_Array.get(in).index_Trans,
model.Verb_Array.get(in).index_Stelle));
repaint();
}
}
} else if(model.VerschElem_Array.get(p).Sorte == 2) {
int abstandX = model.VerschElem_Array.get(p).AbstandX;
int abstandY = model.VerschElem_Array.get(p).AbstandY;
model.Stellen_Array.set(model.VerschElem_Array.get(p).Pos,
new Stelle(e.getX() - abstandX - xOffset,
e.getY() - abstandY - yOffset,
model.Stellen_Array.get(p).stelle_laenge,
model.Stellen_Array.get(p).stelle_breite,
model.Stellen_Array.get(p).anzahl_Markierungen,
model.Stellen_Array.get(p).stelle_color,
model.Stellen_Array.get(p).tex,
true));
for(int r=0; r < model.Verb_Array.size();r++) {
if(model.Verb_Array.get(r).von_Stelle &&
model.Verb_Array.get(r).zu_Trans &&
model.Verb_Array.get(r).index_Stelle == p) {
v_stelle.add(r);
} else if(model.Verb_Array.get(r).zu_Stelle &&
model.Verb_Array.get(r).von_Trans &&
model.Verb_Array.get(r).index_Stelle == p) {
z_stelle.add(r);
}
}
if(v_stelle.size() > 0) {
for(int s=0; s < v_stelle.size(); s++) {
int in = v_stelle.get(s);
model.Verb_Array.set(in, new Verbindung(
model.Stellen_Array.get(p).stelle_x_kor+(groesseWidth/2),
model.Stellen_Array.get(p).stelle_y_kor+(groesseHeight/2),
model.Verb_Array.get(in).xEnde,
model.Verb_Array.get(in).yEnde,
model.Verb_Array.get(in).color,
model.Verb_Array.get(in).von_Trans,
model.Verb_Array.get(in).von_Stelle,
model.Verb_Array.get(in).zu_Trans,
model.Verb_Array.get(in).zu_Stelle,
model.Verb_Array.get(in).index_Trans,
model.Verb_Array.get(in).index_Stelle));
repaint();
}
}
if(z_stelle.size() > 0) {
for(int s=0; s < z_stelle.size(); s++) {
int in = z_stelle.get(s);
model.Verb_Array.set(in, new Verbindung(
model.Verb_Array.get(in).xAnfang,
model.Verb_Array.get(in).yAnfang,
model.Stellen_Array.get(p).stelle_x_kor+(groesseWidth/2),
model.Stellen_Array.get(p).stelle_y_kor+(groesseHeight/2),
model.Verb_Array.get(in).color,
model.Verb_Array.get(in).von_Trans,
model.Verb_Array.get(in).von_Stelle,
model.Verb_Array.get(in).zu_Trans,
model.Verb_Array.get(in).zu_Stelle,
model.Verb_Array.get(in).index_Trans,
model.Verb_Array.get(in).index_Stelle));
repaint();
}
}
}
}
}
repaint();
}
Hat irgendjemand schon mal ein ähnliches Problem gehabt? Ich sitze seit heute Vormittag daran und
kann den Fehler einfach nicht finden.