我正在编写一个Java程序来绘制一个三角形,其顶点由用户点击鼠标指定。到目前为止,我已经将每个坐标对放入一个名为points
的数组中,但我在绘制三角形时遇到了麻烦。
看到坐标对属于float
类型且drawLine()
方法需要int
,有什么方法可以使用float
绘制线条,或者我必须将它们转换为int
?
代码
public void mouseClicked(MouseEvent e) {
int left = DrawingPanel.iX(-rWidth/2), right = DrawingPanel.iX(rWidth/2);
int top = DrawingPanel.iY(rHeight/2), bot = DrawingPanel.iY(-rHeight/2);
if(!(e.getX() > right || e.getX() < left ||
e.getY() < top || e.getY() > bot)) {
clickCount++;
if(clickCount >= 4) {
DrawingPanel.points[3] = new Point(e.getX(), e.getY());
DrawingPanel.ready = true;
drawingPanel.repaint();
}
else {
DrawingPanel.points[clickCount - 1] = new Point(e.getX(), e.getY());
}
}
else
JOptionPane.showMessageDialog(frame, "Must click inside red rectangle. Try again.");
}
});
DrawingPanel
是我创建的用于绘制三角形的类。
答案 0 :(得分:1)
假设您有一个名为DrawingPanel
的类,它以某种方式扩展Component
,并且该类的实例名为drawingPanel
,您将其称为repaint()
方法。<登记/>
首先,我不建议以静态方式访问drawingPanel的所有后缀,但这只是作为旁注。
如果您想绘制三角形,则必须覆盖paint(Graphics g)
类中的DrawingPanel
方法。
将其粘贴到DrawingPanel
类中应该可以解决问题:
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
// This line is optional. It makes the edges of the triangle much smoother.
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// Give the triangle whatever color you want.
g2.setColor(Color.BLACK);
int[] x = new int[3];
int[] y = new int[3];
for (int i = 0; i < 3; i++) {
Point p = points[i];
x[i] = (int)p.getX();
y[i] = (int)p.getY();
}
// Alternatively use g2.drawPolygon to just draw the outlines
g2.fillPolygon(x, y, 3);
g2.dispose();
}
(我没有测试过代码。我希望它有效。)
答案 1 :(得分:0)
您应该可以使用Point.x Point.y绘制三角形。你不需要使用int和float。