我想显示可以具有负坐标(X 和 Y(的点。目前,具有负 X 的点似乎正确显示(即:它们位于具有正 X 的点的左侧(。
但是,具有负 Y 的点显示在我的图形顶部:例如,Y = -5 的点将显示在 Y = -3 的点的顶部......
如何撤消此Graphics
显示?
我的(简单(代码:
package general_classes;
import javax.swing.*;
import java.awt.*;
import java.util.List;
public class Graph extends JFrame {
private List<StorableData> list_detected_points;
private List<StorableData> list_all_points;
private Cupple barycenter;
public Graph(String title, List<StorableData> list_all_points, List<StorableData> list_detected_points) {
double scaling_coef = 200;
double move_x = 500, move_y = 500;
this.add(new JPanel() {
private Graphics graphics;
int x, y;
private void drawPoint(Cupple storable_data) {
x = (int) (storable_data.getNumber(0) * scaling_coef + move_x);
y = (int) (storable_data.getNumber(1) * scaling_coef + move_y);
graphics.fillRect(x, y, 10, 10);
graphics.drawString(storable_data.toString(), x - 5, y - 5);
}
@Override
public void paint(Graphics graphics) {
this.graphics = graphics;
for(StorableData storable_data : list_all_points) {
graphics.setColor(Color.WHITE);
this.drawPoint((Cupple) storable_data);
}
if(list_detected_points != null) {
for (StorableData storable_data : list_detected_points) {
graphics.setColor(Color.RED);
this.drawPoint((Cupple) storable_data);
}
}
}
});
this.setVisible(true);
}
}
假设您收到了需要绘制的所有点,首先找到每个维度上的最小和最大坐标。这样,您可以获得比例因子(使用最小值和最大值之间的距离以及您拥有的绘图框的大小(和偏移量(以便最小值对应于绘图框的零(。
然后使用上面的数据创建一个AffineTransform
,它将在您绘制时正确转换每个点。