使用MouseClicked在Java中绘制三角形

时间:2015-02-25 19:44:41

标签: java

我正在编写一个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是我创建的用于绘制三角形的类。

2 个答案:

答案 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。