2

我正在制作一个实用程序来为我的游戏在地图中定义立足点,并且我正在 JScrollPane 内的 JPanel 内显示地图的预览。当地图大于 JScrollPane 时,我希望能够滚动。我该怎么做?

这是一张图片

z

更大的版本

地图的图像适合滚动窗格,但图像实际上更大,所以我们看不到整个地图。

一些代码:

将图像保存在 scrollPane 内的 JPanel 类

public class MapDisplay extends JPanel {

public MapDisplay() {
}

@Override
protected void paintComponent(Graphics g) {
    super.paintComponents(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.setColor(new Color(0xDFDFDF));
    g2d.fillRect(0, 0, 2000, 2000);
    if (mapinfo != null) {
    if (mapinfo.img != null) {
        g2d.drawImage(mapinfo.img, 0, 0, null);
    }
    }
    repaint();
}
}

scrollPane 的声明

final JScrollPane scrollPane_1 = new JScrollPane(mapDisplay);

scrollPane_1.setBounds(10, 11, 989, 553);
getContentPane().add(scrollPane_1);
add(scrollPane_1);
4

1 回答 1

3

MapDisplay必须“告诉”它JScrollPane想要多大。getPreferredSize您可以通过实现 的方法来做到这一点MapDisplay

public Dimension getPreferredSize() {
    return new Dimension(widthOfMap, heightOfMap);
}

此外,不要repaint()方法内部调用paintComponent(),因为这会导致无限循环。

于 2012-09-22T20:44:43.837 回答