Question

I'm making an utility to define footholds in a map for my game and i am displaying the preview of the map inside a JPanel that's inside a JScrollPane. I would like to be able to scroll when the map is bigger than the JScrollPane. How should i do that?

Here's a picture

z

Bigger version

The image of the map fits inside of the scrollpane but the image is actually larger so we don't get to see the whole map.

Some code:

The JPanel class which holds the image inside of the 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();
}
}

the scrollPane's declaration

final JScrollPane scrollPane_1 = new JScrollPane(mapDisplay);

scrollPane_1.setBounds(10, 11, 989, 553);
getContentPane().add(scrollPane_1);
add(scrollPane_1);
Was it helpful?

Solution

The MapDisplay has to 'tell' the JScrollPane how big it wants to be. You can do so by implementing the getPreferredSize method of MapDisplay.

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

Further, do not call repaint() from inside the paintComponent() method, as this results in an infinite loop.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top