内置JPanel的JScrollPane在图片较大时不显示滚动条

时间:2012-09-22 19:44:28

标签: java swing jpanel jscrollpane absolutelayout

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

这是一张图片

z http://screensnapr.com/e/gKkYSw.png

Bigger version

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

一些代码:

JPanel类,它将图像保存在scrollPane

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);

1 个答案:

答案 0 :(得分:3)

MapDisplay必须'告诉'JScrollPane它想要多大。您可以通过实施getPreferredSize的{​​{1}}方法来实现此目的。

MapDisplay

此外,public Dimension getPreferredSize() { return new Dimension(widthOfMap, heightOfMap); } 方法中调用repaint(),因为这会导致无限循环。