У меня проблема, которую я не могу исправить с помощью кода Java.drawLine component with setBounds
Я создал программу, которая отображает карту, когда вы нажимаете на карту, u получаю краф/узел, пунктирный на карте. Когда я соединяю два узла друг с другом, должна быть показана строка между связанными точками.
До сих пор так хорошо, или я так думал, но ... Это нормально, когда x1,y1
координаты имеют значения, которые меньше, чем x2,y2
...
Я понял, что это SetBounds, что было пугая я ... Но я не знаю, как решить свою проблему, и я не могу найти какой-либо симулятивной проблемы где-нибудь вокруг ... Кто-нибудь сталкивался с такой проблемой, и если да, то как вы это решили?
import java.awt.*;
import javax.swing.*;
public class DrawMyLine extends JComponent{
private int fx, fy, tx, ty;
private int h,w;
private int m;
private double k;
private Destinations from;
private Destinations to;
public DrawMyLine(Destinations from, Destinations to){
this.from=from;
this.to=to;
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
fx = from.getX();
fy = from.getY();
tx = to.getX();
ty = to.getY();
//w = Math.abs(tx - fx);
//h = Math.abs(ty - fy);
w = tx - fx;
h = ty - fy;
int x,y;
if(ty>fy){ //This is my, not so great solution so far...
x = fx;
y = fy;
}
else{
x = tx;
y = ty;
}
setBounds(x+5,y+5, w, h); //How do I reverse the boundary?
setPreferredSize(new Dimension(w, h));
setMinimumSize(new Dimension(w, h));
setMaximumSize(new Dimension(w, h));
}
//@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.BLACK);
g.drawLine(0,0,w,h);
}
//Method to reduce the clickable area to 5 pixels from the line
public boolean contains(int x, int y){
k = ((ty-fy)/(tx-fx));
if(k >= 0){
m = 0;
}
else{
m = ty - fy;
}
return Math.abs(y - k * x - m) < 5;
}//contains
public Destinations getFrom(){
return from;
}
public Destinations getTo(){
return to;
}
}
И в основном (когда два узла соединены):
DrawMyLine dml = new DrawMyLine(from,to);
panel.add(dml);
panel.repaint();
dml.addMouseListener(lineListener);
Может кто-нибудь мне помочь? Пожалуйста!
Не меняйте границы, переверните линию ... – MadProgrammer