metoda paintComponent(Graphics g)

0

Witam,

napisałem pewien program w Javie, w którym posiadam dwie klasy rozszerzające JPanel. W jednej z nich robię override metody protected void paintComponent(Graphics g), w której wywołuję super.paintComponent(g). W klasie głównej w każdej iteracji robię repaint() i wszystko działa, jak należy - obiekt jest rysowany i z kolejnym wywołaniem rysowany jest nowy, a stary znika. Stworzyłem drugą klasę rozszerzającą JPanel i teraz chciałbym, aby obiekt nie znikał. Gdy w paintComponent(Graphics g) usunę super.paintComponent(g) to dzieje się dziwna rzecz - w panelu rysuje się obiekt z pierwszej klasy + obiekt z drugiej klasy i obydwa z nich znikają. Jak zrobić aby obiekt nie znikał z każdym wywoływaniem repaint() tylko pozostawał a na panelu rysował się nowy z każdą iteracją?

Przy okazji: W programie mam JTextField, do którego mam podłączonego słuchacza, który jak zauważyłem, reaguje tylko na enter(gdy wcisnę enter to wykona się kod xxx:

if(e.getSource() == panel_ster.m1textfield)
{
xxx;
}
Jak zrobić aby xxx wykonywał się wtedy, gdy wpiszę coś w polu i ustawię kursor w innym textfield? Czyli, gdy stanie się nieaktywny?

0
  1. Musisz mieć kolekcje obiektów do rysowania, po dodaniu obiektu do kolekcji wywołuj repaint, paintComponent musi rysować wszystkie obiekty z kolekcji.
  2. Dodaj focusListenera.
0

ale jak zrobić, aby jeden z obiektów był rysowany i wymazywany, a drugi żeby był rysowany i już pozostał na zawsze?

0

Usuwaj z kolekcji niepotrzebne obiekty.

0

a co rozumiesz przez kolekcję?
Można prosić o jakiś przykład bo nie rozumiem za bardzo?

1

Np. ArrayList<Shape>. Możesz w tym przechowywać elipsy, łuki, wielokąty, łamane, odcinki,...

0

I to jest jedyny sposób? Nie wierzę, że w Javie nie ma możliwości 'ciągłego' rysowania.

0

Ok, zrobiłem i działa. Aczkolwiek wydaje mi się to strasznie nieefektywne, tym bardziej, że mój program to symulacja podwójnego wahadła w czasie rzeczywistym. I takie gromadzenie i rysowanie punktu po punkcie, co chwilę od nowa wydaje się co najmniej dziwne. Ale działa dobrze i płynnie ;)
ten focusListener też działa
Dzięki wielkie za pomoc!!!

0

Możesz rysować w pamięci na obiekcie BufferedImage, a w paintComponent rysować ten BufferedImage.

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