我正在为我正在制作的游戏制作地图编辑器.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));我这里的代码使用 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)