0

我一直在看 Java2D 教程,想知道如何使用鼠标绘制形状来定义其大小(即形状的大小不固定)。我还没有遇到专门针对此的教程,并且想知道如何为矩形实现此功能。

4

3 回答 3

1

基本上,大小在每一刻都是固定的。当您添加 aMouseMotionListener时,在捕获下一个事件之前,您可以在屏幕上绘制形状,其大小取决于当前MouseEvent.getPoint(),它告诉您鼠标位置的坐标。

覆盖paintComponent(Graphics g)组件的方法。repaint()并在每次更新鼠标位置和形状大小后调用方法:

class YourPanel extends JPanel extends MouseMotionListener, MouseListener {

    private Rectangle rect = new Rectangle();

    public YourPanel () {
        addMouseListener(this);
        addMouseMotionListener(this);
    }

    @Override
    public void paintComponent (Graphics g) {
        super.paintComponent(g);
        g.draw(rect);
    }

    @Override
    public void mouseDragged (MouseEvent me) {
        rect.setSize(me.getX() - rect.x, me.getY() - rect.y);
        repaint();
    }

    @Override
    public void mousePressed (MouseEvent me) {
        rect.setLocation(me.getX(), me.getY());
        repaint();
    }

    // Other methods...

}
于 2013-01-21T18:39:14.227 回答
0

Shapes 是一个 word 和 java 类,表示不同的几何图形,如矩形、椭圆、折线等。

所以首先用户必须决定哪种形状,例如折线。
然后,您将捕获鼠标左键单击事件,并为每次单击读取鼠标坐标并将该坐标对(例如 java.awt.geom.Point2D())添加到ArrayList<Point2D>. 这种列表的大小(实际上)是无限的。
在每次单击时,您将创建一个将被绘制的当前形状对象。一旦用户单击鼠标右键,形状就准备好了,您将其存储在形状列表中。

于 2013-01-21T18:32:08.223 回答
0

您应该让您的类实现鼠标侦听器,然后使用 getX 和 getY 保存鼠标侦听器的变量以绘制形状。

于 2013-01-21T18:42:46.210 回答