我已经编写了一些代码来实现拖放缩放(即用鼠标绘制一个矩形,然后放大这个区域以便它填充容器)在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;
}
}
答案 0 :(得分:1)
dragging
只应在调用true
时设置为mouseDragged
,然后在调用mouseReleased
时,您需要检查拖动是否为true
在处理缩放之前
有一些理论可以使用mouseClicked
,只有当mousePressed
和mouseReleased
的鼠标点相同时才会调用mousePressed
。
因此,在点击操作中,您可以调用mouseReleased
,mouseClicked
和mousePressed
(我相信这个顺序,但您最好对其进行测试)。
在拖动操作中,您可以预期mouseDragged
,mouseReleased
和save
被调用