scrolle działają jak gumka

0

Witam piszę coś ala painta i w momencie tym mam taki problem że moje scrolle działają jak gumka marząca, program załączam poniżej. Proszę o szybką pomoc.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package graficzny1;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToggleButton;

/**
 *
 * @author Marcin
 */
public class grafika extends JFrame{


   private JToggleButton przyciski[];
 private JTextArea jTextArea1;


   private class ObslugaPrzycisku implements ActionListener{

       private JFrame ref_okno;

       ObslugaPrzycisku(JFrame okno){
            ref_okno = okno;
       }

       public void actionPerformed(ActionEvent e) {
            JToggleButton bt = (JToggleButton)e.getSource();
    
        }

   }


 private int         x;
 private int         y;
public String nazwa="0";
public String nazwa1="0";
   public grafika()
   {
        super("Okno interfejsu");
        setSize(800,700);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jTextArea1 = new JTextArea();
       //-------------------------------------------------------
        przyciski = new JToggleButton[3];
        przyciski[0] = new JToggleButton("pedzel");
        przyciski[0].addActionListener(new ObslugaPrzycisku(this));

        przyciski[1] = new JToggleButton("kolo");
        przyciski[1].addActionListener(new ObslugaPrzycisku(this));

        przyciski[2] = new JToggleButton("kwadrat");
        przyciski[2].addActionListener(new ObslugaPrzycisku(this));
       
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(3, 1));
        JPanel panelPrzyciski   = new JPanel(new FlowLayout());
        panelPrzyciski.add(przyciski[0]);
        
        panel.add(panelPrzyciski);
     
             JPanel panelPrzyciski1   = new JPanel(new FlowLayout());
    
        panelPrzyciski1.add(przyciski[1]);
        panel.add(panelPrzyciski1);

             JPanel panelPrzyciski2   = new JPanel(new FlowLayout());
        
        panelPrzyciski2.add(przyciski[2]);
        panel.add(panelPrzyciski2);


        //-------------------------------------------------------
 



 final panel pan = new panel(Color.gray, new Dimension());
 JScrollPane pane = new JScrollPane(pan);
  // Dekoruje panel suwakami
    pane.setViewportView(pan);

    // Suwaki zawsze widoczne
    pane.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    pane.setVerticalScrollBarPolicy(
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);


 //---panel do umieszczania grafiki---------//



 //----umieszczanie grafiki---------//

        //-------------------------------------------------------
        JPanel gornyPasek  = new JPanel(new FlowLayout());

        JMenuBar menuBar = new JMenuBar();
        gornyPasek.add(menuBar);
        JMenu Plik= new JMenu("Plik"); // tworzymy element ktory umiescimy w pasku.
        menuBar.add(Plik);
        JMenuItem nowy = new JMenuItem("nowy");
        JMenuItem otwórz = new JMenuItem("otwórz");
        JMenuItem zapisz = new JMenuItem("zapisz");// dodajemy nasz element do calego paska
        JMenuItem exit = new JMenuItem("exit");


        exit.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
        System.out.println("Exit performed");
        System.exit(0);
        }
        });
                otwórz.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            


JFileChooser chooser = new JFileChooser();
int r = chooser.showOpenDialog(chooser);
      if(r != JFileChooser.APPROVE_OPTION) return;
                File plik = chooser.getSelectedFile();
                jTextArea1.setText(plik + "");
                nazwa = String.valueOf(jTextArea1.getText());
  Image zd;
 for(int i=0;i<=1;i++){
 

 zd=Toolkit.getDefaultToolkit().getImage(nazwa);
 pan.im[i]=zd;

 }
 
 pan.repaint();

        }
        });

         nowy.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

 
 Image zd;
 for(int i=0;i<=1;i++){
 nazwa="bialo.jpg";
 
 zd=Toolkit.getDefaultToolkit().getImage(nazwa);
 pan.im[i]=zd.getScaledInstance(800,600,Image.SCALE_FAST);

 }

pan.repaint();


        }
        });

        Plik.add(nowy );
        Plik.add(otwórz );
        Plik.add(zapisz );
        Plik.add(exit );
        


        //-------------------------------------------------------
        Container content       = getContentPane();
        content.setLayout(new BorderLayout());

        
        content.add(gornyPasek,BorderLayout.PAGE_START);
          
          content.add(panel,BorderLayout.BEFORE_LINE_BEGINS);
        content.add(pane,BorderLayout.CENTER);
        



        setVisible(true);
   }




                      public static void main(String args[]){
       new grafika();


   }
   }





0

Zapomniałem dodać że jest jeszcze drugi problem, bo do tego programu jest jeszcze druga(zamieszczona poniżej) i przy wczytywaniu obrazu, jako otwórz, jest taki motyw że za pierwszym razem on jakby wpisywał sobie obraz do pamięci, i dopiero za drugim razem go otworzy, ale w momencie, gdy następnie otworzymy inny plik i znów będziemy chcieli otworzyć poprzedni to uda się to bez problemu, i jak przy czymś takim zrobić by otworzył to za pierwszym razem?

package graficzny1;

import java.awt.*;
 import javax.swing.*;

 class panel extends JPanel{
 public Image[] im=new Image[4];
 public Graphics[] gr=new Graphics[4];

 public panel(Color c, Dimension r){
this.setLayout(new FlowLayout());
 this.setBackground(c);
 this.setPreferredSize(r);
 }



    @Override
 public void paintComponent(Graphics g){
 super.paintComponent(g);

 int h=this.getHeight();
 int w=this.getWidth();
 for(int i=0;i<=1;i++){
 if(im[i]==null){
 im[i]=this.createImage(w,h);
 gr[i]=im[i].getGraphics();}
 }

 g.drawImage(im[0],0,0,this);

 }
 }

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