相关疑难解决方法(0)

通过拖动鼠标滚动JScrollPane(Java swing)

我正在为我正在制作的游戏制作地图编辑器.JScrollPane中有一个JPanel,用于显示要编辑的地图.我想要做的是,当用户按住空格键并在JPanel中拖动鼠标时,JScrollPanel将随拖动一起滚动.这是我到目前为止:

panelMapPanel.addMouseMotionListener(new MouseMotionListener(){

        @Override
        public void mouseDragged(MouseEvent e) {
            //Gets difference in distance x and y from last time this listener was called
            int deltaX = mouseX - e.getX();
            int deltaY = mouseY - e.getY();
            mouseX = e.getX();
            mouseY = e.getY();
            if(spacePressed){
                //Scroll the scrollpane according to the distance travelled
                scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getValue() + deltaY);
                scrollPane.getHorizontalScrollBar().setValue(scrollPane.getHorizontalScrollBar().getValue() + deltaX);
            }
        }

});
Run Code Online (Sandbox Code Playgroud)

目前它的工作原理但滚动并不顺畅.一次移动鼠标很好但是做小拖动会使滚动条变得狂暴.

任何想法如何改善这个?

对于那些喜欢视觉帮助的人,这里是编辑:

地图编辑器

加法笔记(编辑):

  • 我试过了 scrollPane.getViewport().setViewPosition(new Point(scrollPane.getViewport().getViewPosition().x + deltaX, scrollPane.getViewport().getViewPosition().y + deltaY));
  • 当慢慢移动鼠标时,拖动更加烦躁,而大动作则更加平滑
  • 我没有运气就尝试使用scrollRectToVisible

java mouse swing scroll

7
推荐指数
2
解决办法
5572
查看次数

JScrollPane setViewPosition 在“缩放”之后

我这里的代码使用 MouseAdapter 来监听用户在他们想要放大的图像区域周围“绘制”一个框,并计算该框与图像的比率。然后,它将图像大小调整为计算出的比率。这部分有效。

我遇到的问题是使 JScrollPane 视图看起来好像在调整图像大小后它仍然位于相同的左上角位置。我尝试了几种方法,似乎已经接近我想要的结果,但并不完全准确。

这是查找比例并设置位置的监听器:

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.Graphics;
import java.awt.Point;

import javax.swing.JScrollPane;
import javax.swing.JViewport;
import javax.swing.JComponent;

public class DynamicZoom extends MouseAdapter {

private Point start;
private Point end;
private double zoom = 1.0;
private JScrollPane pane;
private JViewport port;


public void mousePressed(MouseEvent e) {
    if(e.getButton() == MouseEvent.BUTTON1) {
        this.pane = (JScrollPane)e.getSource();
        this.port = pane.getViewport();
        start = e.getPoint();
    }
}

public void mouseReleased(MouseEvent e) {
    if(this.pane != null) {
        Point curr = this.port.getViewPosition();
        end = e.getPoint(); …
Run Code Online (Sandbox Code Playgroud)

java image jscrollpane zooming

2
推荐指数
1
解决办法
5578
查看次数

标签 统计

java ×2

image ×1

jscrollpane ×1

mouse ×1

scroll ×1

swing ×1

zooming ×1