[Java] JPanel - keine Positionierung
Verfasst: 17.01.2013, 12:47
Hey!
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
Das Element hat seine eigene Unterklasse preferences in denen alle Eigenschaften wie x,y,width usw. gespeichert werden und abgerufen werden können.
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:
ist noch einiges mehr drinn, währe zu lang. Wenn ich das ganze Panel rumziehe klappt das auch ganz gut (also an sich scheint die Methode okay zu sein), wenn ich jetzt beim initialisieren des Elements aber x- und y-coordinaten setze (auf die gleiche weise wie beim "rumziehen"), dann bleibt es da wo es ist (zumindest auf dem Bildschirm).
Ich kann es dann auch nicht mehr rumziehen wenn ich draufklicke, es ist als würde es an der stelle nicht sein. Wenn ich mit der maus zu den coordinaten fahre wo es sein "sollte" kann iches aber rumziehen (nicht grafisch - merke ich nur an meinen ausgaben (siehe oben).
Edit: Code der beim "dragging" aufgerufen wird:
Ich hoffe das war jetzt nicht zu verwirrend.. :) Und ich hoffe Ihr könnt mir helfen das sich das panel gleich vom Anfang an richtig positioniert,
Grüße Flo
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