JButton'y nie działają

0

Witam Forumowiczów!

Zacząłem niedawno naukę Javy, uczę się z Core Java 2 Podstawy.

Chciałem połączyć dwa przykładowe programy opisane w tej książce: Rysowanie linii za pomocą klawiatury (coś ala etch a sketch) oraz zmiana koloru tła panelu. Niestety w 'moim' kodzie te dwie operacje się wykluczają. Tło nie zmienia w ogóle kolorów, a gdy naciśnie się przycisk to nie można już rysować. (oddzielnie programy działają) Czy jest to może związane z użyciem KeyListenera oraz ActionListenera jednocześnie?

kod:

0
                public void actionPerformed(ActionEvent zdarzenie)
                {
                        setBackground(kolorTla);
                        repaint();
                        requestFocus();
                }
                ..............
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
                Graphics2D g2 = (Graphics2D)g;
               
                /* rysuje wszystkie linie */
                for (int i=0; i<linie.size(); i++)
                        g2.draw((Line2D)linie.get(i));
        }

Metoda show() jest deprecated, używaj setVisible(true).
Okno na środku można ustawic tak:

setLocationRelativeTo(null);
0

wow, dzięki za tak szybką i trafną odpowiedź!

próbowałem stąd http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Component.html#requestFocus()
dowiedzieć się czemu służy requestFocus(), ale nie rozumiem tego za bardzo, mógłbyś okrasić to krótkim komentarzem? :)

co do super.paintComponent to muszę wywoływać tę metodę, gdy korzystam z innych standardowych komponentów, tak? w celu przeładowania w tym przypadku rysowania?

no i dzięki za dalsze wskazówki!

0
super.paintComponent(g)

to metoda klasy bazowej JPane, robi niewiele - rysuje pusty panel w kolorze tła.
requestFocus() przenosi fokus na panel, bo tylko panel reaguje na klawisze, nie wiem dlaczego kliknięcie w panel nie przenosi na niego fokusu

0

nie będę zakładał nowego tematu bo mój kolejny problem w sumie dotyczy czego innego, ale tego samego programu.

Oto kod działającego poprawnie programu:

Rysujemy w nim kwadraty za pomocą myszki. Kwadraty rysują się również przy wciśniętym przycisku myszki i przesuwaniu nią. Chciałem dodać ten program do wcześniejszego, by móc np zamalować narysowany za pomocą kursorów obiekt.


niestety wtedy obsługa myszki przestaje poprawnie funkcjonować i kwadraty nie dodają się przy przesuwaniu myszą podczas wciśniętego lewego przycisku.
dziwne:/

0

up

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