当我鼠标拖动以绘制圆形时,形状在某些情况下会移动

时间:2017-05-11 01:05:43

标签: java

 @Override
    public Shape getShape() {
        final Ellipse2D.Double result = new Ellipse2D.Double();
        final double px = Math.min(getStart().getX(), getEnd().getX());
        final double py = Math.min(getStart().getY(), getEnd().getY());
        final double pw = Math.abs(getStart().getX() - getEnd().getX());
        result.setFrame(px, py, pw, pw);
        return result;
    }

所以这个getShape()将形状返回到绘制形状的类。 getStart()在点击时获取鼠标的起始点,getEnd()在鼠标释放时获得Point。现在,当我拖动绘制一个圆圈时,如果我向右或向下拖动圆圈按预期工作并展开到鼠标,如果我向上或向左拖动光圈,圆圈会扩展,因为它应该 BUT 圆圈形状随光标向上和向下移动,我不知道为什么。

1 个答案:

答案 0 :(得分:3)

Java中的形状基于左上角作为锚点,宽度/高度是向下/向右绘制的。

您需要计算点击点和拖动点之间的边界框

public Shape getShape() {
    final Ellipse2D.Double result = new Ellipse2D.Double();
    final double px = Math.min(getStart().getX(), getEnd().getX());
    final double py = Math.min(getStart().getY(), getEnd().getY());
    final double pw = Math.abs(getStart().getX() - getEnd().getX());
    result.setFrame(px, py, pw, pw);
    return result;
}

问题是,您仍然使用点击点和拖动点之间的差异来计算宽度,pw应该是maxX和{{1}之间的差异}值

因此this example向您展示了如何计算锚点和大小属性

  

我仔细阅读了该帖子,但它并没有解决圈子的拖拽扩张,以及它如何上下移动。

然后你做错了什么

  

我试图在没有相同宽度和高度(椭圆)的情况下绘制圆形而不是圆形。

好的,所以应始终显示圆圈是从定位点绘制的,所以当minXminX小于minY' s { {1}} / clickPoint点,然后您需要将它们调整为x和大小的差异

Example

所以,这将使它'#34;出现"好像圆圈始终是从初始点击点

绘制的
y