Wątek przeniesiony 2015-03-04 16:13 z Java przez bogdans.

Zmiana obrazka po wciśnięciu klawisza

0

Witam,

mam proste pytanie, jednak nie mogę sobie z nim poradzić. Mianowicie chcę, żeby po wciśnięciu klawisza zmieniał się obrazek (w panelu).
Obsługę klawiszy mam jednak, nie wiem jaką funkcję wywołać (lub jak to w ogóle zrobić), by obrazek się zmieniał.

Kod klasy rysującej:

public class Drawer extends JPanel {

	
	private BufferedImage image;

	public Drawer(String name) {
		super();

		im(name);
	}

	public void im(String name)
	{
		File imageFile = new File(name+".png");
		try {
			image = ImageIO.read(imageFile);
		} catch (IOException e) {
			System.err.println("Blad odczytu " +name+".png");
			e.printStackTrace();
		}
		
		

		Dimension dimension = new Dimension(image.getWidth(), image.getHeight());
		setPreferredSize(dimension);
	}
	
	@Override
	public void paintComponent(Graphics g) {
		
		Graphics2D g2d = (Graphics2D) g;
		g2d.drawImage(image, 0, 0, this);
	}
}
 

Utworzenie JPanela w JFrame,

JPanel im= new Drawer("im"); 

I to wszystko działa, tylko jak teraz zmienić wczytany obrazek na inny?

Dzięki za wszelkie porady ;)

0

Wczytaj obrazek, zapamiętaj w tej samej zmiennej i wywołaj repaint.

0

Dzięki za odpowiedź.
Dopiero zaczynam przygodę z Javą, więc nawet z tak jasną odpowiedzią, niestety dalej nie wiem jak to wykonać. Jak wczytać obrazek ten obrazek, bez robienia obiektu mojej klasy Drawer?

0

Wywołaj metodę im. Szczegóły zależą od tego w której klasie jest klawisz.

0

właśnie tak kombinowałem, ale nie wiem jak ją wywołać (uczyłem się wcześniej C++ tam zrobiłbym to obiekt.im(); , a tutaj?)
klawisz jest w innej klasie Form rozszerzająca JFrame

0

To chyba

im.im();

Zmienna im musi być polem w klasie, a nie zmienną lokalną konstruktora czy też metody.

0

Nie mam jej ani w konstruktorze, ani w metodzie, a mimo to nie mogę się dostać do tej funkcji ;/

public class Form extends JFrame {


	JPanel im= new Drawer("obrazek");
	
	
	Keyboard keyListener=new Keyboard();
	
	// KONSTRUKTOR 
          .
          .
          .  itd...

wywołanie im.im("nazwa");
nie działa, nie widzi mi tej funkcji

1

W klasie JPanel jest metoda im?
Albo

Drawer im = new Drawer("obrazek");

albo rzutowanie

((Drawer)(im)).im("nazwa");
0

faktycznie.. takie przeoczenie ;)

Dzięki wielkie!

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