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

Jak dodać scrollbar po wczytaniu zbyt dużego zdjęcia?
LU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 127
0
Kopiuj
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:

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

to znowu ucina obrazek i nie widać scrollbara.

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Na początek przerób ten kod

Kopiuj
        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ć.

LU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 127
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.

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
1

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

Kopiuj
        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
        } 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.