Bin neu, hoffe einfach mal das ich hier nicht der einzige Java-Mensch und richtig bin :)
Ich bin grad dabei eine einfache Anwendung zu schreiben. Hauptziel war erstmal das "rumziehen" von einem JPanel und die interaktion etc. auf einem JScrollpane, und das "dynamische" hinzufügen von dem JPanel an verschiedene coordinaten des JScrollpane's.
Das ganze ist so aufgebaut:
Ein JScrollPane in in einem JFrame. (extra Klasse)
MainKlasse->Mein Methode (zum initialisieren etc.)
und dann noch ein
Code: Alles auswählen
public class Element extends JPanel implements MouseListener, MouseMotionListener
Wenn das Element bewegt wird (also via MouseDragging) wird der MouseMotionListener, der sich auch in der Klasse Element befindet angesprochen und ändert einfach in den preferences die x und y-coordinaten (als Point). Daraufhin wird repaint aufrerufen, die dann den rest erledigt:
Code: Alles auswählen
@Override
public void paintComponent( Graphics g ){
...
setLocation(propertys.bounds.getPosition());
setPreferredSize(propertys.bounds.getSize());
System.out.println("X: "+propertys.bounds.getPosition().x+" Y: "+propertys.bounds.getPosition().y);
}
Code: Alles auswählen
public Element(Point startPos) {
super();
propertys = new Propertys("test.jpg", Color.BLACK, Color.RED, getGraphics()); //ist nur die anfängliche "befüllung" der propertys hat nichts zu sagen
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.setLayout(new BorderLayout());
this.propertys.bounds.setBounds(new Rectangle(startPos, new Dimension(200, 200))); //vllt. ein bisschen ungünstig gelöst, sollte aber eig. funktionieren
this.repaint(); //nur zum testen damit er es auch wirklich nochmal neu "zeichnet"
}
Edit: Code der beim "dragging" aufgerufen wird:
Code: Alles auswählen
@Override
public void mouseDragged(MouseEvent e) {
int x = e.getXOnScreen()-10; //aktuelle maus-position herausfinden
int y = e.getYOnScreen()-50;
//dragg only when mouse is on "drag-panel"
if(x-this.getLocation().x < 35 && y-this.getLocation().y < 35 && x-this.getLocation().x >= -35 && y-this.getLocation().y >= -35) { //es gibt ein kleines "dragg-panel am oberen linken rand des panels... Nur wenn sich die maus über diesem befindet soll sich das panel bewegen lassen (funktioniert)
propertys.bounds.setPosition(new Point(x, y));
this.repaint();
}
}
Grüße Flo