Hallo,
ich programmiere gerade eine Anwendung in Swing, in welchem per Mausklick Rechtecke eingefügt
werden können (dies ist er möglich nach dem Drücken des Buttons "Rechteck setzen").
Wenn man den Button "verschieben" drückt, soll man die einzelnen Rechtecke per Mausklick verschieben
können. Und darin liegt das Problem, leider lassen sich die Rechtecke immer nur stückchenweise
verschieben, so daß man mehrmals das Rechteck anklicken muß, um es zur Zielposition zu ziehen.
Hier der entscheidende Programmabschnitt:
vielleicht hat jemand einen Tipp, wie sich das lösen läßt.
ich programmiere gerade eine Anwendung in Swing, in welchem per Mausklick Rechtecke eingefügt
werden können (dies ist er möglich nach dem Drücken des Buttons "Rechteck setzen").
Wenn man den Button "verschieben" drückt, soll man die einzelnen Rechtecke per Mausklick verschieben
können. Und darin liegt das Problem, leider lassen sich die Rechtecke immer nur stückchenweise
verschieben, so daß man mehrmals das Rechteck anklicken muß, um es zur Zielposition zu ziehen.
Hier der entscheidende Programmabschnitt:
Code:
public class BildBewegen extends JPanel implements MouseListener, MouseMotionListener{
int k = 0;
int x, y;
int[] xArray = new int[10];
int[] yArray = new int[10];
int[] xOffset = new int[10];
int[] yOffset = new int[10];
boolean verschieben = false;
boolean rechteck = true;
public BildBewegen() {
setSize(300, 300);
addMouseListener(this);
addMouseMotionListener(this);
}
public void paint (Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
for(int i=0; i < 10; i++) {
g2.drawRect(xArray[i], yArray[i], 40, 40);
}
}
public void setVerschieben() {
verschieben = true;
rechteck = false;
}
public void setRechteck() {
verschieben = false;
rechteck = true;
}
public boolean getVerschieben() {
return verschieben;
}
public boolean getRechteck() {
return rechteck;
}
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
if(getVerschieben()) {
for(int i=0; i < 10; i++) {
if(x >= xArray[i] && x <= xArray[i]+40 &&
y >= yArray[i] && y <= yArray[i]+40) {
xOffset[i] = x - xArray[i];
yOffset[i] = y - yArray[i];
}
}
}
if(getRechteck()) {
xArray[k] = x;
yArray[k] = y;
k++;
repaint();
}
}
public void mouseDragged(MouseEvent e) {
if(getVerschieben()) {
for(int i= 0; i < 10; i++) {
if(x >= xArray[i] && x <= xArray[i]+40 &&
y >= yArray[i]&& y <= yArray[i]+40) {
xArray[i] = e.getX() - xOffset[i];
yArray[i] = e.getY() - yOffset[i];
repaint();
}
}
}
repaint();
}
vielleicht hat jemand einen Tipp, wie sich das lösen läßt.