24.04.2018
Obsługa zdarzeń - Mysz
https://javastart.pl/baza-wiedzy/darmowy-kurs-java/grafika_awt_swing/obsluga-zdarzen-mysz
1/8
Darmowy kurs Java
>
>
Obsługa zdarzeń - Mysz
Ostatnim typem prostych zdarzeń generowanych przez użytkownika są kliknięcia, przeciągnięcia, lub po prostu zmiana położenia
kursora myszy. Jak się w tej lekcji przekonamy ich obsługa również nie jest zbyt skomplikowana, a po napisaniu kilku aplikacji z
wykorzystaniem tego mechanizmu będziemy mogli sprawnie się nim posługiwać. Postaramy się napisać prostą aplikację, która w
odpowiedzi na kliknięcia w obszarze panelu będzie rysowała różne kształty, natomiast Twoim zadaniem będzie jego rozbudowa o
dalszą funkcjonalność.
W przypadku zdarzeń generowanych przez klawiaturę używaliśmy interfejsu KeyListener, tym razem, jak nietrudno zgadnąć,
schemat będzie podobny. Możemy jednak wyróżnić dwa interfejsy które służą do przechwytywania dwóch typów zdarzeń, które
mogą zaistnieć
- interfejs słuchacza zdarzeń myszy. Odpowiedzialny za kliknięcia i pojawianie się kursora nad komponentem
nasłuchującym.
- interfejs, który pozwala przechwytywać zdarzenia związane z ruchem kursora.
Warto również wspomnieć o tym, że istnieją klasy MouseAdapter i MouseMotionAdapter, dzięki którym nie musimy implementować
wszystkich metod, a tylko te, które są nam potrzebne - minusem jest oczywiście to, że w Javie nie ma dziedziczenia wielobazowego,
więc jeśli rozszerzamy przykładowo klasę JPanel, nie będziemy mogli użyć klasy adaptera.
Przejdźmy do rzeczy. Interfejs MouseListener posiada pięć metod:
Na szczęście ich nazwy są intuicyjne i zazwyczaj wiadomo której użyć. W przypadku mouseClicked należy jedynie pamiętać, że za
kliknięcie uważamy wciśnięcie i zwolnienie przycisku w tym samym miejscu, jeśli przycisk wciśniemy, przesuniemy kursor i dopiero
zwolnimy przycisk, wtedy zostaną wywołane zarówno mousePressed() oraz mouseReleased, ale nie mouseClicked().
Podobnie sprawa wygląda w przypadku interfejsu MouseMotionListener, jednak tutaj są tylko dwie metody:
Jak widać wszystkie z metod otrzymują jako parametr obiekt klasy MouseEvent. Przechowuje on bardzo dużo ciekawych informacji
na temat zdarzenia, które nastąpiło. Możemy z niego odczytać położenie kursora zarówno względem punktu (0,0) naszego panelu,
lub innego komponentu nasłuchującego, a także położenie na ekranie. Przycisk, który został wciśnięty, oraz wiele więcej, Dodatkowo
klasa MouseEvent posiada szereg zde niowanych stałych, z którymi możemy porównywać dane otrzymane od systemu. Aby w ogóle
móc przechwytywać zdarzenia myszy musimy najpierw dodać do komponentu nasłuchującego odpowiedniego słuchacza, za
pomocą metod addMouseListener, lub addMouseMotionListener.
Na początek napiszmy prościutki program, który zawiera panel implementujący oba wspomniane interfejsy, a wszystko umieścimy w
ramce. Informację o zdarzeniach będziemy wyświetlali w konsoli przy pomocy standardowego strumienia wyjścia.
Klasa panelu implementującego interfejsy:
//metoda wywoływana, gdy następuje kliknięcie, czyli wciśnięcie i zwolnienie przycisku myszy, ale uwaga, obie te operacje mus
public
void
mouseClicked(MouseEvent event)
//metoda wywoływana, gdy zostaje wciśnięty przycisk myszy\
public
void
mousePressed(MouseEvent event)
//metoda wywoływana, gdy następuje zwolnienie przycisku myszy
public
void
mouseReleased(MouseEvent event)
//metoda wywoływana, gdy kursor pojawia się w obszarze nasłuchującym na zdarzenia, na przykład panelu
public
void
mouseEntered(MouseEvent event)
//metoda wywoływana, gdy kursor opuszcza obszar nasłuchujący zdarzenia
public
void
mouseExited(MouseEvent event)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//metoda wywoływana, gdy wciśniemy przycisk i przeciągniemy kursor
public
void
mouseDragged(MouseEvent event)
//metoda wywoływana, gdy poruszamy kursor w obszarze nasłuchującym zdarzenia
public
void
mouseMoved(MouseEvent event)
1
2
3
4
5
import
java.awt.event.MouseEvent;
import
java.awt.event.MouseListener;
import
java.awt.event.MouseMotionListener;
import
javax.swing.JPanel;
public
class
MouseTestPanel
extends
JPanel
implements
MouseListener
,
MouseMotionListener
{
public
MouseTestPanel()
{
1
2
3
4
5
6
7
8
SPRAWDŹ NASZ KURS JAVY 9
24.04.2018
Obsługa zdarzeń - Mysz
https://javastart.pl/baza-wiedzy/darmowy-kurs-java/grafika_awt_swing/obsluga-zdarzen-mysz
2/8
Klasa ramki i jednocześnie klasa testowa:
Należy oczywiście najpierw rozciągnąć sobie okienko, wjeżdżając i wychodząc z obszaru panelu, a także klikając w jego obszarze
można zaobserwować w konsoli, które metody zostają wywoływane.
Przejdźmy jednak do tego o czym wspomniałem na początku. Napiszmy program, który w miejscu, w którym klikniemy narysuje
jakieś kształty, np kwadraty. Nie ma tutaj znaczenia, czy użyjemy do tego celu metody mousePressed, mouseReleased, czy
mouseClicked, wszystko zależy od naszej inwencji, ale przyjmijmy, że będzie to mousePressed.
Panel z rysowaniem kwadracików 10x10 pikseli:
addMouseListener(
this
);
addMouseMotionListener(
this
);
}
@Override
public
void
mouseDragged(MouseEvent arg0)
{
System.out.println(
"mouseDragged"
);
}
@Override
public
void
mouseMoved(MouseEvent arg0)
{
System.out.println(
"mouseMoved"
);
}
@Override
public
void
mouseClicked(MouseEvent e)
{
System.out.println(
"mouseClicked"
);
}
@Override
public
void
mouseEntered(MouseEvent e)
{
System.out.println(
"mouseEntered"
);
}
@Override
public
void
mouseExited(MouseEvent e)
{
System.out.println(
"mouseExited"
);
}
@Override
public
void
mousePressed(MouseEvent e)
{
System.out.println(
"mousePressed"
);
}
@Override
public
void
mouseReleased(MouseEvent e)
{
System.out.println(
"mouseReleased"
);
}
}
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import
java.awt.EventQueue;
import
javax.swing.JFrame;
public
class
Frame
extends
JFrame
{
public
Frame()
{
super
(
"MouseTest"
);
add(
new
MouseTestPanel());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(
true
);
}
public
static
void
main(String[] args)
{
EventQueue.invokeLater(
new
Runnable() {
@Override
public
void
run()
{
new
Frame();
}
});
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import
java.awt.*;
import
java.awt.*;
import
java.awt.event.*;
import
java.util.ArrayList;
1
2
3
4
5
24.04.2018
Obsługa zdarzeń - Mysz
https://javastart.pl/baza-wiedzy/darmowy-kurs-java/grafika_awt_swing/obsluga-zdarzen-mysz
3/8
W skrócie. Posiadamy dwie zmienne x, y, które będą przechowywały miejsce, w których kliknął użytkownik. Dane do tego potrzebne
otrzymamy w obiekcie MouseEvent, który jest parametrem wykorzystywanej przez nas metody mousePressed. Położenie kursora w
momencie zajścia zdarzenia uzyskujemy dzięki metodom getX() oraz getY(). Dodatkowo stworzyliśmy zmienną typu boolean, dzięki
której kwadracik nie jest rysowany po starcie programu w punkcie (0,0), czyli domyślnych wartości x i y. W metodzie mousePressed za
każdym razem mody kujemy zmienne x i y oraz wywołujemy metodę repaint(). Rysowanie polega na wypełnieniu tła białym kolorem
i narysowaniu czarnego kwadracika o wymiarach 10x10 pikseli.
import
javax.swing.JPanel;
public
class
MouseTestPanel
extends
JPanel
implements
MouseListener
{
private
static
nal
int
DEFAULT_WIDTH =
200
;
private
static
nal
int
DEFAULT_HEIGHT =
200
;
private
int
x, y;
ArrayList points =
new
ArrayList();
public
MouseTestPanel()
{
addMouseListener(
this
);
setPreferredSize(
new
Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT));
}
@Override
public
void
mouseClicked(MouseEvent e)
{
}
@Override
public
void
mouseEntered(MouseEvent e)
{
}
@Override
public
void
mouseExited(MouseEvent e)
{
}
@Override
public
void
mousePressed(MouseEvent e)
{
x = e.getX();
y = e.getY();
points.add(
new
Point(x, y));
repaint();
}
@Override
public
void
mouseReleased(MouseEvent e)
{
}
@Override
protected
void
paintComponent(Graphics g)
{
super
.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.WHITE);
g2d. llRect(
0
,
0
,
this
.getWidth(),
this
.getHeight());
g2d.setColor(Color.BLACK);
drawRectangles(g2d);
}
private
void
drawRectangles(Graphics2D g2d)
{
int
x, y;
for
(Point p : points) {
x = (
int
) p.getX();
y = (
int
) p.getY();
g2d. llRect(x, y,
10
,
10
);
}
}
}
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import
java.awt.EventQueue;
import
javax.swing.JFrame;
public
class
Frame
extends
JFrame
{
public
Frame()
{
super
(
"MouseTest"
);
add(
new
MouseTestPanel());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(
true
);
1
2
3
4
5
6
7
8
9
10
11
24.04.2018
Obsługa zdarzeń - Mysz
https://javastart.pl/baza-wiedzy/darmowy-kurs-java/grafika_awt_swing/obsluga-zdarzen-mysz
4/8
W klasie ramki dodaliśmy znaną nam metodę pack(), która dostosowała rozmiar ramki do naszego panelu.
Jesteśmy już blisko końca, ale zapewne chcielibyśmy, aby na planszy pojawiały się wszystkie kwadraciki, które narysowaliśmy, a nie
tylko jeden. Jak to najprościej uzyskać? Oczywiście musimy przechowywać gdzieś wartości punktów, w których zaszły kliknięcia.
Mogłaby to być tablica, ale nie jest to dobre rozwiązanie, bo musielibyśmy z góry zakładać, jaka ilość kwadracików może pojawić się
na planszy. Znacznie lepiej będzie wykorzystać jakąś strukturę danych - najlepiej listę. My wybierzemy listę tablicową ArrayList, ale
mogłaby to być równie dobrze LinkedList. Dodatkowo dodamy do niej parametr, który określi, konkretny typ obiektów, co chroni nas
przed rzutowaniem. Jedyne zmiany zachodzą w klasie panelu, więc jedynie jego kod umieszczono poniżej:
}
public
static
void
main(String[] args)
{
EventQueue.invokeLater(
new
Runnable() {
@Override
public
void
run()
{
new
Frame();
}
});
}
}
12
13
14
15
16
17
18
19
20
21
22
import
java.awt.*;
import
java.awt.event.*;
import
java.util.ArrayList;
import
javax.swing.JPanel;
public
class
MouseTestPanel
extends
JPanel
implements
MouseListener
{
private
static
nal
int
WIDTH =
200
;
private
static
nal
int
HEIGHT =
200
;
private
int
x, y;
ArrayList<Point> points =
new
ArrayList<Point>();
public
MouseTestPanel()
{
addMouseListener(
this
);
setPreferredSize(
new
Dimension(WIDTH, HEIGHT));
}
@Override
public
void
mouseClicked(MouseEvent e)
{
}
@Override
public
void
mouseEntered(MouseEvent e)
{
}
@Override
public
void
mouseExited(MouseEvent e)
{
}
@Override
public
void
mousePressed(MouseEvent e)
{
x = e.getX();
y = e.getY();
points.add(
new
Point(x, y));
repaint();
}
@Override
public
void
mouseReleased(MouseEvent e)
{
}
@Override
protected
void
paintComponent(Graphics g)
{
super
.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.WHITE);
g2d. llRect(
0
,
0
, WIDTH, HEIGHT);
g2d.setColor(Color.BLACK);
drawRectangles(g2d);
}
private
void
drawRectangles(Graphics2D g2d)
{
int
x, y;
for
(Point p: points) {
x = (
int
)p.getX();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
24.04.2018
Obsługa zdarzeń - Mysz
https://javastart.pl/baza-wiedzy/darmowy-kurs-java/grafika_awt_swing/obsluga-zdarzen-mysz
5/8
Ponieważ kolekcje nie były jeszcze szczegółowo omawiane, a o typach generycznych było jedynie kilka wzmianek jestem winny wam
pewne objaśnienie co do części kodu:
Tworzymy tutaj dynamiczną strukturę danych. Najprościej rzecz ujmując jest to tablica, która potra
sama zwiększać swój rozmiar, gdy zajdzie taka potrzeba. Klasa ArrayList jest częścią frameworka Collections, zawierającego kilka
innych struktur.
Dzięki temu, że dodaliśmy jej konkretny typ (tzw typ generyczny), wiemy jakie obiekty będziemy przechowywać - w naszym
przypadku Point. Więcej na ten temat możecie przeczytać w
.
Wracając do naszego panelu, zmiana polega na tym, że teraz po każdym kliknięciu myszy prze użytkownika dodajemy do listy
points
nowy obiekt typu
Point
(położenie punktu na płaszczyźnie), a nie tak jak wcześniej od razu go rysujemy. Stworzyliśmy pomocniczą
metodę drawRectangles(), w której przy pomocy pętli
rysujemy wszystkie nasze kwadraty na podstawie punktów
znajdujących się w kolekcji (ArrayList implementuje interfejs Iterable, dzięki czemu jest to możliwe). W metodzie paintComponent()
przekazujemy jej obiekt typu Graphics2D związany z danym kontekstem, dzięki któremu możemy rysować. Wyrzuciliśmy z kodu
również zmienną blokującą rysowanie kwadracika po starcie systemu, ponieważ teraz rysujemy obiekty z kolekcji, która na początku
jest domyślnie pusta.
Zadania do samodzielnego wykonania:
4.4 Dodaj możliwość usuwania narysowanych kształtów za pomocą prawego przycisku myszy. Dodaj także możliwość przesuwania
wcześniej narysowanych kształtów.
Podpowiedź 1: Klasa MouseEvent posiada metodę getButton(), która zwraca kod wciśniętego klawisza. Są w niej również
zde niowane odpowiednie stałe, z którymi można porównywać wynik zwrócony przez metodę getButton(), np BUTTON1 ...
Podpowiedź 2: Przy przesuwaniu elementów wykorzystaj interfejs MouseMotionListener i metodę mouseDragged().
Komentarze
Dodawanie komentarzy jest aktualnie wyłączone.
y = (
int
)p.getY();
g2d. llRect(x, y,
10
,
10
);
}
}
}
59
60
61
62
63
ArrayList<Point> points =
new
ArrayList<Point>();
1
Seb
A u mnie występuje problem z pętlą: <b>for (Point p : points) {</b> i wyświetla komunikat: <b> Exception in thread "AWT-
EventQueue-0" java.lang.Error: Unresolved compilation problem: Type mismatch: cannot convert from element type Object to
Point</b> Po uruchomieniu programu wyświetla się forma ale z przezroczystym tłem i na tym koniec
Seb
OK. Nieuważnie przeczytałem opis. W listingach faktycznie jest błąd: <b>ArrayList points = new ArrayList();</b> ale potem jest
opisany w artykule: <b>ArrayList points = new ArrayList();</b>
Slawek
24.04.2018
Obsługa zdarzeń - Mysz
https://javastart.pl/baza-wiedzy/darmowy-kurs-java/grafika_awt_swing/obsluga-zdarzen-mysz
6/8
Można wiedzieć, gdzie jest ten błąd, bo nie mogę się dopatrzeć? Dzięki :)
kris_IV
Ja też nie widzę, ale przy kopiowaniu nie działało :)
Seb
Eclipse wywala mi blędy przy: <code><b>ArrayList points = new ArrayList();</b></code> a dzała dopiero tak: <code><b>ArrayList
<Point> points = new ArrayList <Point>();</b></code>
Slawek
ah ok, w sumie moje niedopatrzenie, bo w swoim eclipse wyłączyłem sprawdzanie takich błędów. Dzięki jeszcze raz.
E30Tomas
15 ArrayList points = new ArrayList(); <-- point jest z małej litery, a działa dopiero przy dużej. ArrayList points = new ArrayList();
64 } <--- działa bez "" (Z pierwszego panelu z rysowaniem)
E30Tomas
Edytor tekstu wycina wstawkę z "Point" jak są ostre nawiasy. Powinno być tak (zamiast " ostry nawias) ArrayList"Point" points =
new ArrayList"Point"();
marcin
Rozumiem kod i pojmuję, że metoda "paintComponent(Graphics g)" służy nam, w skrócie, do rysowania. Jednak nie mogę się
dopatrzeć i zrozumieć jak to jest, że program działa, mimo że ta metoda nie jest nigdzie wywoływana.. może mi to ktoś
wytłumaczyć?
Hekkaryk
Główna klasa rozszerza JPanel: "extends JPanel implements MouseListener". W konstruktorze tworzysz nowy JPanel: "public
MouseTestPanel() { addMouseListener(this); setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT)); }" ...który
automatycznie wywołuję metodę paintComponent(Graphics g). Przynajmniej takie jest moje zrozumienie tegoż :P
folcrum
Witam serdecznie i prosze o pomoc. Napisalem sobie programik obsługujący zdarzenia myszy. Problem polega na tym, że pisany
w NetBeansie i tam uruchamiany dzieła poprawnie. Ale gdy staram się odpalić go z poza NetBeansa lub na innym komputerze
wyskakuje mi błąd : "a java exception has occurred" i za nic na świecie nie wiem o co biega. Oto kod programu: <code> import
java.awt.event.*; import java.awt.event.MouseEvent; import javax.swing.JApplet; import java.awt.*; public class Oczko extends
JApplet implements MouseListener, MouseMotionListener { boolean otwarte; int x,y; int srx; int sry; @Override public void
mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { } @Override public void
mouseReleased(MouseEvent e) { } @Override public void mouseDragged(MouseEvent e) { } @Override public void
mouseEntered(MouseEvent e){ this.otwarte = true; this.repaint(); } @Override public void mouseExited(MouseEvent e){
this.otwarte = false; this.repaint(); } @Override public void mouseMoved(MouseEvent e){ this.x = e.getX(); this.y = e.getY();
this.repaint(); } @Override public void init(){ setSize(500,500); this.addMouseListener(this); // ta metoda wlacza "nasluch" na
przyciski myszki this.addMouseMotionListener(this); // ta metoda wlacza "nasluch" na ruchy myszki otwarte = false; } @Override
public void paint(Graphics g){ int wspx = 250; int wspy = 250; double promienoka = 100; double promienmyszy; double c;
g.setColor(Color.red); g. llOval(100, 100, 300, 300); promienmyszy = Math.sqrt(Math.pow(wspx-x,2)+Math.pow(wspy-y, 2)); if
(otwarte==true){ g.setColor(Color.yellow); g. llOval(150, 150, 200, 200); g.setColor(Color.black); g.drawOval(150, 150, 200, 200); if
(promienokapromienmyszy+13) { g.setColor(Color.green); g. llOval(x-13, y-13, 26, 26); } } if (otwarte == false){ g.setColor(Color.red);
g. llOval(150, 150, 200, 200); g.setColor(Color.black); g.drawOval(150, 150, 200, 200); } } } </code>
Biko
A ja sobie zrobiłem tak: @Override public void mousePressed(MouseEvent e) { x = e.getX(); y = e.getY(); paintPoint(); } private void
paintPoint() { Graphics2D g2d = (Graphics2D) getComponentGraphics(getGraphics()); g2d.setColor(Color.black); g2d. llRect(x, y, 5,
5); } żeby nie rysować po każdym punkcie wszystkiego od nowa i nie tworzyć listy. W związku z tym mam pytanie. Czy jest jakieś
uzasadnienie (best practice czy coś w tym stylu) do stosowania metody repaint()?
Slawek
Co do repaint() - wywołujemy ją tylko wtedy, gdy to niezbędne. Nie jest wskazane wywoływać ją na przykład w każdym
przebiegu jakiejś pętli (chyba, że to uzasadnione). Nie wywołujemy jej też wewnątrz metody paintComponent, bo się
oczywiście zapętlimy. Co do Twojego rozwiązania ma jedną kluczową wadę - nie przechowujesz nigdzie punktów. Spróbuj
rozszerzyć okienko - wszystkie punkty znikną :) Dodatkowo gdybyś chciał dorobić opcję usuwania narysowanych kształtów -
byłby problem. W rozwiązaniu zaprezentowanym na stronie można by wprowadzić oczywiście usprawnienie, żeby nie
odrysowywać wszystkich punktów za każdy nowym kliknięciem - podwójne buforowanie. Czyli zapamiętujemy stan kanwy i
dorysowujemy na niej tylko nowy kształt.
24.04.2018
Obsługa zdarzeń - Mysz
https://javastart.pl/baza-wiedzy/darmowy-kurs-java/grafika_awt_swing/obsluga-zdarzen-mysz
7/8
javalamer
Czyli najlepiej byłoby zostawić paintComponent bez zmian, ale pod mousePressed podpiąć rysowanie pojedynczego punktu
zamiast repaint.
Problem
Mam pytanie-jak sprawić, by coś działo się po określonym czasie?
Solo
WitamRobiłem tak jak napisałeś, ale efekt jest taki sam jak opisałem wyżej, nadal nie moge usunąć kwraadtu. Może nie w tym
miejsu wklejam tą linijkę kodu co podałeś. Nie bardzo rozumię napisz np: nr. 4 . , ale gdzie mam to wpisać bo poprostu nie
wiem, możesz mi ty wytłumaczyć tak łopatologicznie, będę wdzięczny. Kod jest taki sam jak w zadanmiu.Pozdrawiam
Wiki
Napisałeś, że między ostatnimi dwoma klasami MouseTestPanel zaszła jakaś zmiana.. Ale oprócz ucięcia pierwszej linijki, która była
niepotrzebna i zmiany nazwy dwóch zmiennych to nie widzę miedzy nimi różnicy..
krzysiek
Z tą myszką można też zrobić troszkę inaczej. Zamiast implementować interfejsy MouseListener i MouseMotionListener i potem
nadpisywać łącznie 7 metod (czy są nam one potrzebne czy nie), to można poprostu stworzyć wewnętrzną klasę dziedziczącą z
klasy MouseInputAdapter i nadpisać tylko te metody które nas interesują. Przykładowo potrzebujemy tylko metodę
mousePressed: class Mouse extends MouseInputAdapter{ public void mousePressed(MouseEvent e){ System.out.println("Metoda
\"mousePresssed\""); } } addMouseListener(new Mouse());
Rafał
W trzecim bloku kodu (licząc od góry) jest błąd. ArrayList points = new ArrayList(); słowo "point" powinno być z dużej litery. Dla
początkujących - takich jak ja znalezienie tego błędu może być problemem.
Borys
Witam! Próbuję napisać program, który będzie niejako wyzwalał obrazek kliknięciem myszki, tzn. kliknięcie na panelu ma
powodować pojawienie się w tym miejscu obrazka pobranego z dysku. Logicznym wydaje się zaimplementowanie
MouseListenera i umieszczenie w nim metody wczytującej i wyświetlającej dany obrazek, jednakże próbuję i próbuję na różne
sposoby i nic nie działa. Może coś robię źle, może mam zupełnie błędne podejście... W każdym razie proszę o pomoc - Może ktos
umiałby napisać taki kod? Pozdrawiam!
Robert
Witam. Mam 2 pytania: 1. Cytat z lekcji powyżej: "Dodatkowo stworzyliśmy zmienną typu boolean, dzięki której kwadracik nie jest
rysowany po starcie programu w punkcie (0,0), czyli domyślnych wartości x i y." W którym miejscu jest ta zmienna? 2. Fragment
kodu: for (Point p : points) { ... } Jak mam to rozumieć (konkretnie to 'p: points'? Domyślam się mniej więcej jak to działa, tylko czy
można to jakoś bardziej "łopatologicznie" rozpisać? Pozdrawiam
Sławek Ludwiczak
Hej, booleana mogło wciąć z powodu małej awarii formatowania kodu na stronie, będę musiał zwery kować przykład.
for(Point p: points)... możesz rozumieć identycznie jak: <pre class="java"> Point p = null; for(int i=0; i<points.size(); i++) { p =
points.get(i); ... } </pre>
tochur
Jeślichodzi o ten artuykuł to dwarazy pojawił się ten sam kod ( w drugim przykładzie jest od razu podany sposób z
przechowywaniem punktów w liście Array) A nie ma natomiast kodu z przykładu w którym to po każdym kliknięciu miał się
pokazywać jeden kwadracik i znikać). Co do kursu, jest on prowadzony na naprawdę dobrym poziomie, dziękuję za poświęcony
czas Panie Sławku.
PODWALE 62 / POK. 316,
WROCŁAW
24.04.2018
Obsługa zdarzeń - Mysz
https://javastart.pl/baza-wiedzy/darmowy-kurs-java/grafika_awt_swing/obsluga-zdarzen-mysz
8/8