鼠标拖动缩放实现Java - 不是单击

时间:2016-03-07 19:52:43

标签: java swing mouselistener

我已经编写了一些代码来实现拖放缩放(即用鼠标绘制一个矩形,然后放大这个区域以便它填充容器)在JPanel上。然而,在我把它写入Listener之前,我有一个" mouseClicked"方法,它仍然存在。该方法执行不同的功能,只需返回点击的坐标。

不幸的是,我错误地使用MousePressed实现了缩放功能,因此MousePressed与mouseClicked事件同时运行。这意味着当我单击鼠标来获取坐标时,它也会放大一个非常小的矩形。反正有改变吗?

提前感谢您的任何建议,如果您需要澄清,请告诉我们!

以下是监听器类:

class panelClickListener extends MouseAdapter实现了MouseMotionListener {

    JLabel toShowCoords, rangeLabel;
    juliaPanel panelJulia;
    mandPanel panelMand;
    int startX, startY, currentX, currentY;
    boolean dragging;
    ComplexNumber startRange, endRange;

    public panelClickListener(JLabel toShowCoordsIn, juliaPanel panelJuliaIn, mandPanel panelMandIn, JLabel rangeLabelIn) {
        toShowCoords = toShowCoordsIn;
        panelJulia = panelJuliaIn;
        panelMand = panelMandIn;
        rangeLabel = rangeLabelIn;
    }

    public void mouseClicked(MouseEvent e)   {   
        int x = e.getX();   
        int y = e.getY();   
        userSelectedPoint = pointsToDrawOn[x][y];
        toShowCoords.setText("Number Selected: " + userSelectedPoint.getReal() + " , " + userSelectedPoint.getImaginary());
        panelJulia.setFixedNumber(pointsToDrawOn[x][y]);
        panelJulia.repaint();
    } 

    public void mousePressed(MouseEvent event) {
        Point point = event.getPoint();
        startX = point.x;
        startY = point.y;
        dragging = true;
    }

    public void mouseReleased(MouseEvent event) {
        dragging = false;
        startRange = pointsToDrawOn[startX][startY];
        endRange = pointsToDrawOn[currentX][currentY];
        maxVal = endRange;
        minVal = startRange;
        rangeLabel.setText("Real axis: " + minVal.getReal() + "," + maxVal.getReal() + " - Imaginary axis: " + minVal.getImaginary() + "," + maxVal.getImaginary());
        populatePointArray();
        panelMand.repaint();
    }

    public void mouseDragged(MouseEvent event) {
        Point p = event.getPoint();
        currentX = p.x;
        currentY = p.y;
    }

}

1 个答案:

答案 0 :(得分:1)

dragging只应在调用true时设置为mouseDragged,然后在调用mouseReleased时,您需要检查拖动是否为true在处理缩放之前

有一些理论可以使用mouseClicked,只有当mousePressedmouseReleased的鼠标点相同时才会调用mousePressed

因此,在点击操作中,您可以调用mouseReleasedmouseClickedmousePressed(我相信这个顺序,但您最好对其进行测试)。

在拖动操作中,您可以预期mouseDraggedmouseReleasedsave被调用