如何在绘图画布上实现形状操作?

时间:2011-12-02 18:38:01

标签: java mouseevent shapes

我有一个矢量(_storedShapes)来存储绘制的矩形(_rect)。我还计划添加省略号。我想要做的是在我点击的屏幕上添加一个形状,并能够调整它的大小。这是一个网站,其中演示了我要做的事情http://code.google.com/p/tangram-canvas/downloads/detail?name=TangramCanvas-1.2.zip

与此演示的唯一区别在于,当我拖动它时,我希望我的形状从其中心的所有侧面展开。

现在从我的代码中,在我单击的画布上弹出一个预先调整大小的矩形,然后当我拖动时,只需按照屏幕上的光标即可。

private class DrawSListener extends MouseAdapter {

    public void mousePressed(MouseEvent e) {
        _preX = (int) (_rect.getX() - e.getX());
        _preY = (int) (_rect.getY() - e.getY());
        DrawingPanel dp = new DrawingPanel();
        _rect = new SketchyRectangle(dp);
        System.out.println("new rec");

    //  if (_rect.contains(e.getPoint())) {
            _rect.setLocation(e.getX(), e.getY());
            System.out.println("setLocation");
            repaint();
            System.out.println("paint");
        //} 
    }
}

/**
 * Private class DrawListener is called when the DrawEllipse or DrawRectangle radio buttons are selected. 
 *
 */

private class DrawListener implements MouseMotionListener {

    public void mouseDragged(MouseEvent e) {
        if (_rect.contains(e.getPoint())) {
            _rect.setLocation(_preX, _preY);
            _storedShapes.add(_rect);
            repaint();
        }
    }
    @Override
    public void mouseMoved(MouseEvent e) {
        // TODO Auto-generated method stub  
    }
}

1 个答案:

答案 0 :(得分:0)

我会在对象中保留两个坐标(或任何有意义的地方):prevDragCoord,shapeCenter。在鼠标单击时,将事件的坐标存储在两个成员中。在鼠标拖动时,通过向其添加当前事件坐标减去对象中存储的坐标的差异来更新矩形大小。通过设置shapeCenter成员和矩形大小除以2之间的差异来设置矩形的位置(例如shapeCenter.x - rect.xLength / 2)。将当前坐标存储在对象的坐标成员中,以便随后对处理程序的任何调用进行更新。

我会把实施留给你。也许你只能使用一个变量,或者可能没有变量,因为事件对象中有一些非常棒的数据来完成它。无论如何,这应该是一般的想法。