metoda paintComponent(Graphics g)

metoda paintComponent(Graphics g)
A6
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 5 lat
  • Postów:20
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?

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
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.

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
A6
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 5 lat
  • Postów:20
0

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

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Usuwaj z kolekcji niepotrzebne obiekty.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
A6
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 5 lat
  • Postów:20
0

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

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

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


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
A6
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 5 lat
  • Postów:20
0

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

A6
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 5 lat
  • Postów:20
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!!!

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

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


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

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.