Jak dodać scrollbar po wczytaniu zbyt dużego zdjęcia?

0
public class ImageViewer extends JFrame implements ActionListener{
    BufferedImage image;
    JPanel panelNaZdjecia = new JPanel();
    BufferedImage bi;

    ImageViewer() throws IOException{
        
        setTitle("ImageViewer");
        Toolkit localToolkit = Toolkit.getDefaultToolkit();
        Dimension localDimension = localToolkit.getScreenSize();
        int i = localDimension.width;
        int j = localDimension.height;
        setBounds(i / 4, j / 4, i / 2, j / 2);
        BufferedImage ikona = ImageIO.read(new File("luneta.png"));
        setIconImage(ikona);
        setJMenuBar(doMenu());
        JScrollPane localJScrollPane = new JScrollPane(this.panelNaZdjecia, 22, 30);
        //setLayout(new BorderLayout());
        add(localJScrollPane, "Center");
        add(doToolBar(),BorderLayout.NORTH);
        add(panelNaZdjecia,BorderLayout.CENTER);
        panelNaZdjecia.add(new PanelDoRysowania(),BorderLayout.CENTER);
        //add(new PanelDoRysowania(),BorderLayout.CENTER);
        setVisible(true);
        setDefaultCloseOperation(3);
    }
        private class PanelDoRysowania extends JPanel 
    {
        
        public void paintComponent(Graphics g)
        {
            try
                {
                    image = ImageIO.read(new URL("http://wallpapers.wallbase.cc/rozne/wallpaper-1632686.jpg"));
                }
                catch (IOException a)
                {
                    System.out.println("blad odczytu");
                }
           g.drawImage(image, 0, 0, null); 
        }
        }

Nie wiem jak dodać tutaj scrollbara. Chodzi mi o to żeby przy wczytaniu dużego zdjęcia można było je przesuwać. Jeśli jest tak jak teraz to nie widać obrazka tzn. obrazek jest tylko w małym kwadraciku na środku. Gdy zrobię tak:

 JScrollPane localJScrollPane = new JScrollPane(this.PanelDoRysowania, 22, 30);

to znowu ucina obrazek i nie widać scrollbara.

0

Na początek przerób ten kod

        public void paintComponent(Graphics g)
        {
            try
                {
                    image = ImageIO.read(new URL("http://wallpapers.wallbase.cc/rozne/wallpaper-1632686.jpg"));
                }
                catch (IOException a)
                {
                    System.out.println("blad odczytu");
                }
           g.drawImage(image, 0, 0, null); 
        }
        }

Absurdem jest odczytywanie pliku z sieci. przy każdym odrysowywaniu okna.
Drugim absurdem jest rysowanie obrazka, którego nie udało się odczytać.

0

Wiem ze to jest źle, ale to jest tylko chwilowo bo chciałem zobaczyć jak będzie wyświetlał się ten obrazek. Pytałem się o scrollbara.

1

Z grubsza rzecz biorąc tak: W konstruktorze okna zrezygnuj z ustalania rozmiaru i położenia

        setTitle("ImageViewer");
        ...
        add(new PanelDoRysowania(),BorderLayout.CENTER);
        pack(); //dopasuje wielkość okna do komponentów
        setLocationRelativeTo(null); //umieszcza okno na środku ekranu
        setVisible(true);
        //setDefaultCloseOperation(3); //za ten wiersz pójdziesz do piekła
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ...
    private class PanelDoRysowania extends JPanel 
    {
        public PanelDoRysowania()
        {
            //tutaj ustal rozmiar panelu, np.
            setPreferredSize(new Dimension(1000,800));
            // lub dopasuj do rozdzielczości monitora
        } 

1 użytkowników online, w tym zalogowanych: 0, gości: 1