Faire défiler l'image dans JFrame contentpane

J'essaie d'afficher une grande image à l'intérieur d'une JFrame du contentpane. Je voudrais faire l'image ou le contentpane de défilement que l'image est grande. J'ai essayé de le faire en utilisant Jscrollpane et l'ajouter dans le contentpane mais il ne fonctionne pas. Fait quelques recherches pour une solution, mais pas réussi à en trouver un. Quelqu'un peut-il me guider? Mon code ci-dessous

FinalEnvironment.java

package environment;

import java.awt.*;
import java.net.URL;

import javax.swing.*;

public class FinalEnvironment{

public FinalEnvironment(){

    Image Eastlake;
    URL EastlakeURL = null;

    EastlakeURL = FinalEnvironment.class.getResource("/image1/eastlake_night.png");
    Eastlake = Toolkit.getDefaultToolkit().getImage(EastlakeURL);

    JFrame frame = new JFrame("UniCat World");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(800, 600);
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);

    JMenuBar yellowMenuBar = new JMenuBar();
    Map map = new Map(800, 550, Eastlake);
    yellowMenuBar.setOpaque(true);
    yellowMenuBar.setBackground(Color.YELLOW);
    yellowMenuBar.setPreferredSize(new Dimension(800, 50));
    frame.setJMenuBar(yellowMenuBar);
    JScrollPane scroller = new JScrollPane(map);
    scroller.setAutoscrolls(true);
    scroller.setPreferredSize(new Dimension(800, 550));
    frame.getContentPane().add(scroller, BorderLayout.CENTER);


    frame.setSize(800, 600);
    frame.setVisible(true);
}

public static void main(String[] args){
    FinalEnvironment fe = new FinalEnvironment();
}
}

Voici mon map.java

package environment;

import java.awt.*;

import javax.swing.*;


public class Map extends JPanel{

    private int width;
    private int height;
    private Image img;

    public Map(int width, int height, Image img){

        this.width = width;
        this.height = height;
        this.img = img;
    }

    protected void  paintComponent(Graphics g)
    {
        super.paintComponents(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(img,0,0,2624,1696,null);
    }

}

Enfin, je tiens à Jbuttons sur le dessus de cette image. Dois-je appeler un Rectangle et le placer sur le dessus de l'image dans le contentpane qui puis-je utiliser le Point à la position de mes boutons ou dois-je tout de suite utiliser l'image ou le composant lui-même de le faire? J'ai besoin de le bouton pour être en mesure de se synchroniser avec l'image quand elle défile au lieu de statique dans le contentpane.

Grâce

source d'informationauteur Noble