Hallo und ein frohes Neues!
Bin gerade dabei mein kleines Programm zu erweitern.
Es wird dabei auf einem JPanel ein Koordinatensystem gezeichnet, in welches Vektoren eingefügt werden können. Jeder Vektor, der übrigens in einer ArrayList gespeichert ist, hat eine Beschriftung. Diese soll der Benutzer nun bewegen können. Ich habe mich schon informiert und bekomme es hin, dass man einen Text bewegen kann.
Das klappt wunderbar, nur passt es nicht ganz auf mein Problem. Ich habe den Code nun so weit angepasst, dass es meiner Meinung nach möglich sein müsste, die Beschriftungen zu bewegen.
Nun stoße ich aber auf zwei Probleme. Ich möchte die Beschriftung mittig und ein wenig verschoben setzen. Wenn ich das mache, kann ich den Text nicht mehr bewegen. Wenn der Text aber im Koordinatensystem auf (0|0) liegt, kann ich diesen einmalig bewegen. Wenn ich den Text dann loslasse, lässt er sich nicht mehr greifen. Ich nehme an, dass die Rectangles nicht richtig plaziert werden?
Hinzu kommt noch, dass die Beschriftung mit meiner Berechnung sowieso nicht richtig plaziert wird. Wenn ich einen Vektor mit v=-2|-2 habe, der an (-5|5) startet, wird die Beschriftung auf (-5|-5) gesetzt. Das ist aber ein anderes Problemchen.
Ich hoffe, dass es verständlich erklärt wurde und ihr mir helfen könnt!
Gruß
Bin gerade dabei mein kleines Programm zu erweitern.
Es wird dabei auf einem JPanel ein Koordinatensystem gezeichnet, in welches Vektoren eingefügt werden können. Jeder Vektor, der übrigens in einer ArrayList gespeichert ist, hat eine Beschriftung. Diese soll der Benutzer nun bewegen können. Ich habe mich schon informiert und bekomme es hin, dass man einen Text bewegen kann.
Java:
public void mousePressed(MouseEvent arg0) {
bDragged = false;
Point mousePoint = arg0.getPoint();
int width = fm.stringWidth("Test");
int height = fm.getHeight();
Rectangle rec = new Rectangle(xPos,yPos-height,width,height);
if(rec.contains(mousePoint)){
bTouche = true;
}
else{
bTouche = false;
}
}
public void mouseReleased(MouseEvent arg0) {
if (bDragged){
Point mousePoint = arg0.getPoint();
Graphics2D g = (Graphics2D) this.getGraphics();
if((xOld != -1)&&(yOld!= -1)){
int dx = xOld - mousePoint.x;
int dy = yOld - mousePoint.y;
xPos -= dx;
yPos -= dy;
}
xOld = mousePoint.x;
yOld = mousePoint.y;
this.repaint();
}
}
public void mouseDragged(MouseEvent arg0){
if (bTouche){
Point mousePoint = arg0.getPoint();
if((xOld != -1)&&(yOld!= -1)){
int dx = xOld - mousePoint.x;
int dy = yOld - mousePoint.y;
xPos -= dx;
yPos -= dy;
}
xOld = mousePoint.x;
yOld = mousePoint.y;
bDragged=true;
this.repaint();
}
}
public void mouseMoved(MouseEvent arg0){
xOld = -1;
yOld = -1;
}
Das klappt wunderbar, nur passt es nicht ganz auf mein Problem. Ich habe den Code nun so weit angepasst, dass es meiner Meinung nach möglich sein müsste, die Beschriftungen zu bewegen.
Nun stoße ich aber auf zwei Probleme. Ich möchte die Beschriftung mittig und ein wenig verschoben setzen. Wenn ich das mache, kann ich den Text nicht mehr bewegen. Wenn der Text aber im Koordinatensystem auf (0|0) liegt, kann ich diesen einmalig bewegen. Wenn ich den Text dann loslasse, lässt er sich nicht mehr greifen. Ich nehme an, dass die Rectangles nicht richtig plaziert werden?
Java:
private int touchedI;
private int xOld = -1;
private int yOld = -1;
private FontMetrics fm = this.getFontMetrics(new Font("Arial",Font.BOLD,10));
public void mousePressed(MouseEvent evt) {
bDragged = false;
Point mousePoint = evt.getPoint();
for(Vektor v:vektoren){
int width = fm.stringWidth(v.getName());
int height = fm.getHeight();
Rectangle rec = new Rectangle((int) v.getPosition().getX(),(int) v.getPosition().getX()-height,width,height);
v.setRectangle(rec);
}
for(int i=0;i<vektoren.size();i++){
Rectangle rec = vektoren.get(i).getRectangle();
if(rec.contains(mousePoint)){
bTouche = true;
touchedI=i;
}
else{
bTouche = false;
}
}
}
public void mouseReleased(MouseEvent evt) {
if (bDragged){
double xPos=vektoren.get(touchedI).getPosition().getX();
double yPos=vektoren.get(touchedI).getPosition().getY();
Point mousePoint = evt.getPoint();
Graphics2D g = (Graphics2D) this.getGraphics();
if((xOld != -1)&&(yOld!= -1)){
int dx = xOld - mousePoint.x;
int dy = yOld - mousePoint.y;
xPos -= dx;
yPos -= dy;
vektoren.get(touchedI).setPosition(new Point2D.Double(xPos,yPos));
}
xOld = mousePoint.x;
yOld = mousePoint.y;
this.repaint();
}
}
public void mouseDragged(MouseEvent evt){
if (bTouche){
double xPos=vektoren.get(touchedI).getPosition().getX();
double yPos=vektoren.get(touchedI).getPosition().getY();
Point mousePoint = evt.getPoint();
if((xOld != -1)&&(yOld!= -1)){
int dx = xOld - mousePoint.x;
int dy = yOld - mousePoint.y;
xPos -= dx;
yPos -= dy;
vektoren.get(touchedI).setPosition(new Point2D.Double(xPos,yPos));
}
xOld = mousePoint.x;
yOld = mousePoint.y;
bDragged=true;
this.repaint();
}
}
public void mouseMoved(MouseEvent arg0){
xOld = -1;
yOld = -1;
}
private void vektorBeschriftung(Vektor v, Graphics2D g2d){
if(!vektorBeschriftung){
}
else{
//zoom ist für die Skalierung zuständig. (350|350) ist der Mittelpunkt des Koordinatensystems in Pixeln
double mittelPunktX = (v.getEndX()*zoomX+350)-(v.getStartX()*zoomX+350);
mittelPunktX/=2;
mittelPunktX+=v.getStartX();
mittelPunktX+=350 + 10;
double mittelPunktY = (v.getEndY()*zoomX+350)-(v.getStartY()*zoomX+350);
mittelPunktY/=2;
mittelPunktY-=v.getStartX();
mittelPunktY=350-mittelPunktY+10;
v.setPosition(new Point2D.Double(mittelPunktX,mittelPunktY));
//wenn diese ^ Zeile auskommentiert wird, ist Position auf (0|0) und der Text lässt sich einmalig bewegen
g2d.drawString(v.getName(), (int) v.getPosition().getX(), (int) v.getPosition().getY());
}
}
Hinzu kommt noch, dass die Beschriftung mit meiner Berechnung sowieso nicht richtig plaziert wird. Wenn ich einen Vektor mit v=-2|-2 habe, der an (-5|5) startet, wird die Beschriftung auf (-5|-5) gesetzt. Das ist aber ein anderes Problemchen.
Ich hoffe, dass es verständlich erklärt wurde und ihr mir helfen könnt!
Gruß
Zuletzt bearbeitet: