gpt4 book ai didi

java - 放大和缩小 jPanel

转载 作者:行者123 更新时间:2023-12-03 18:55:46 31 4
gpt4 key购买 nike

我想知道在使用面板的 paintComponent 进行缩放后检索鼠标点击位置的最佳方法是什么? (相对于此缩放的位置)。

这是缩放代码:

public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
if(zoomer==true){
at.scale(zoom,zoom);//at = AffineTransform...
zoomer=false;
}
g2.transform(at);

在我的主类中,我使用了一个鼠标监听器私有(private)类并覆盖了 mouseRelase 方法:

 @Override
public void mouseReleased(MouseEvent e)
e.getX();//Location of the mouse on the X axis

我正在绘制不同的形状,例如点。每个点都存储了它的像素位置,所以如果在 X:20 和 Y:30 创建它,这永远不会改变。当我调用 paintComponent 时,它会变大或变小。我的问题是,我可以点击面板上这些点的位置,它会在一些文本字段中为我提供一些关于我点击的点的信息。如果面板已放大/缩小,则 clic 的位置仍然相同,所以假设我放大,形状不会位于 x:20 和 y:30,而是基于比例的随机位置。我怎样才能将我的点击位置调整到这个比例?

不确定我是否表达清楚,如果您需要更多信息,请不要犹豫。

谢谢

最佳答案

好吧,我已经工作了一个通宵,终于想出了如何做到这一点。

首先是滚动鼠标滚轮时发生的情况:

 @Override
public void mouseWheelMoved(MouseWheelEvent e) {

//Zoom in
if(e.getWheelRotation()<0){
mydrawer.setZoomFactor(1.1*mydrawer.getZoomFactor());
mydrawer.repaint();
}
//Zoom out
if(e.getWheelRotation()>0){
mydrawer.setZoomFactor(mydrawer.getZoomFactor()/1.1);
mydrawer.repaint();
}
}

setZoomFactor 方法执行此操作:

public void setZoomFactor(double factor){        
if(factor<this.zoomFactor){
this.zoomFactor=this.zoomFactor/1.1;
}
else{
this.zoomFactor=factor;
}
this.zoomer=true;
}

之后,当我调用 repaint() 时,我将 Graphics2D 对象转换为缩放,如下所示:

 @Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
if(zoomer==true){
at = new AffineTransform();
at.scale(zoomFactor,zoomFactor);
zoomer=false;
g2.transform(at);
}
}

在这一点上,没有什么新鲜事......我的问题是当我在缩放后单击绘制的对象时,我需要调整相对于缩放因子的点击位置。在我的例子中,我需要 Y 轴的 0 位于左下角而不是默认情况下的左上角,这就是为什么我必须根据面板高度反转该值的原因:

 @Override
public void mouseReleased(MouseEvent e) {
int myXLocationWithoutZoom = e.getX()*(1/myDrawer.getZoomFactor());
int myYLocationWithoutZoom = myPanel.getSize().height-((e.getY())*(1/myDrawer.getZoomFactor()));

如果您找到另一种方法来做到这一点,或者认为我没有采用好的方法,请告诉我。

谢谢

关于java - 放大和缩小 jPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33925884/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com