problem z repaint

0

Sprawa polega na tym że gdy wywołuje repaint() gdzies gdzie tworze nowy obraz dst

slider.addChangeListener(new ChangeListener(){

			public void stateChanged(ChangeEvent arg0)
			{ 	
				System.out.println("slidervalue"+slider.getValue());
				licz++;
				flaga_slider=true;
				try
				{
				src= Toolkit.getDefaultToolkit().getImage(file.getPath());
				}
				catch (NullPointerException e) 
				{
					if(licz%3==0)
						
						jl.setText("Wybierz obraz żeby użyć filtru.");
						jpanel.add(jl);
						jl.setSize(300,100);
						jl.setVisible(true);
				//	Alert("Wybierz obraz żeby użyć filtra.");
				}
				
				dst = src;
			
				// TODO Auto-generated method stub  
			 	try{
				dst  =createImage(new FilteredImageSource(dst.getSource(),
			    	      new AlphaFilter((slider.getValue() * 255) / 9)));
				jpanel.getGraphics().drawImage(dst,0, 0, 600, 600,observer);
				}
				catch (NullPointerException e) {
				//	System.out.println("p was null");
				}

				System.out.println(dst);
			frame.repaint()
			   
			}
			
		});

to w ogóle nie wchodzi do tej funkcji :

public void paint(Graphics g) {
	System.out.println("jestem w paint");
	  if(dst==null){
		komunikat();
	  }else{ System.out.println("obrazek"+dst);
	  jpanel.getGraphics().drawImage(dst, dm.height, dm.width, this);
  } }

nie mówiąc już o tym że w ogóle nie chce mi rysować nowego obrazka sprawa może być bardziej złożona ale działa gdy odwołuje się do Frame przez Super() a nie tworze nowego Frame tylko że wtedy gdy odwołuje się przez super to obraz na JFrame jest zamazany tak jakby się zawiesił proszę o pomoc chętnie naprowadze bliżej do rozwiązania problemu chce żeby działało na frame sprawdzałem tak frame.repaint() też się nie odwołuje do funkcji paint()... prosze o pomoc

0

Wydaje mi się, że aby zadział Ci repaint to musisz przeładować metodę public void paintComponent(Graphics g)

0

nadal nie wchodzi mi do metody paint i nie rysuje obrazu dst...

0

Odnośnie paint i innych podobnych funkcji powinineś wywołać super.paint(g);
A teraz do rzeczy:
Wywyolujesz repaint z frame a tak naprawdę rysujesz obrazek na JPanel(czemu? przeciez Od razu można wywoalać JPanel.repaint() i tam narysować obrazek).
Jesli chodzi o JPanel.getGraphics().drawImage() zmiany tak same sie nie odrysują. Trzeba wywołać repaint JPanelu i dopiero w tym repaint namalować obraz.

0

próbowałem tak też nie działa...

0

Pokaż gdzieś metode repaint z jpanel, a najlepiej jeśli w miarę krótki kod to wrzuć cały tutaj, a jak długi to na http://www.rafb.net/paste/

0

w formie wyjaśnienia wywołuje jpanel.repaint(), ale on w ogóle nie wchodzi do tej metody paint() i właśnie nie wiem czemu? nawet jak wywołam samo repaint() to nie wejdzie do tej metody paint()...

0

jeszcze raz proszę o pomoc...

0

No to ja jeszcze raz o wiecej kodu.

0

Daj jeszcze paintComponent z jPanel ogolnie to jakbys mogl wrzuc caly kod na ta stronke co Ci podalem

0

NIE MA po co wrzucać wszystkiego bo tego dotyczy tylko ten problem...

0

rozkładam ręce już nie mogę użyłem obiekt.update(obiekt.grafika); w time i robia mi sie smugi przy odswiezaniu...

0

Twoje poprzednie pytanie sugeruje że wiesz bardzo niewiele na temat Swinga. Zatem twoje oceny jaki fragment kodu jest ważny a jaki nie, są całkowicie niewiarygodne.
Zamieść zatem cały (super tajny) kod jeśli chcesz pomocy.
pozdrawiam

0

Dużo tego, ale chyba nie wszystko: brak klas ColorFilter i BrightnessFilter.

0

tak wiem ale po co wam to w przykładzie korzystam tylko z alphafilter...

0

Zobaczyłem to później. Niepotrzenbie przysłałeś klasę FilterTest, z której nie korzystasz, a ona wymaga klas ColorFilter i BrightnessFilter.
Do (nie)wyświetlania obrazka nie doszedłem. U mnie po uruchomieniu okno programu wygląda jak śmietnik.
pozdrawiam

Program Cię wyraźnie przerasta, brakuje Ci rozumienia dziedziczenia:
jpanel jest typu JPanel zatem polecenie jpanel.repaint() wywołuje metodę paint klasy JPanel, która nic nie rysuje.
Powinieneś stworzyć nową klasę np. tak:

class MojPanel extends JPanel
{
     private FileTreeFrame parent;
     //-------------
     public <ojPanel(FileTreeFrame parent)
     {
         super();
         this.parent=parent;
     }
     //------------------------
     public void paintComponent(Graphics g)
     {
        if(parent.img!=null)
        {
            g.drawImage(parent.img,...);
        }
     }    
}

Pole jpanel powinieneś deklarować tak:

    private JPanel jpanel;

a tworzyć je w konstruktorze klasy FileTreeFrame tak:

   jpanel=new MojPanel(this);

pozdrawiam

0

zastosowałem się do twoich rad ale niestety teraz w ogóle nie rysuje mi obrazka na jpanel, co nie tak??

proszę mnie chociaż naprowadzić...

// Wklejanie dodatkowych postów z prośbą o pomoc nic nie pomoże.
// Natomiast pomoże Ci poczytanie ze zrozumieniem tutoriali do Swinga

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