POJ 12
Drag'n'Drop
Wstępna implementacja technologii przeciągnij i upuść
W oknie Swingowym (JFrame) należy umieścić kilka etykiet (JLabel),
najlepiej w szachownicy.
Jedna z nich ma zawierać ikonę (najlepiej o prostym kształcie - koło, kwadrat).
Dodatkowo należy utworzyć osobną etykietę, która początkowo nie będzie widoczna
- będzie służyła do wizualizacji przeciąganej ikony.
Cała praca ma się odbywać w metodach obsługujących zdarzenia pochodzące od myszki.
Po naciśnięciu klawisza myszki (mousePressed()) w polu etykiety zawierającej
ikonę należy:
usunąć ikonę z tej etykiety - setIcon(null)
wyświetlić wcześniej pobraną ikonę z tej etykiety (getIcon()) na dodatkowej
etykiecie (setIcon()) i uwidocznić ją (setVisible(true)).
Położenie dodatkowej etykiety ustala się metodą setBounds().
Potrzebne wartości określające położenie można uzyskać metodami getX(), getY()
z obiektu klasy Component, jak również ze zdarzenia MouseEvent.
Podczas przeciągania myszki (mouseDragged()) należy zmieniać lokalizację
dodatkowej etykiety metodą setBounds() pobierając informację o położeniu jak wyżej.
Zwalniając klawisz myszki (mouseReleased()) należy:
sprawdzić w obszarze którego komponentu znajduje się kursor myszki
wyświetlić na nim ikonę znajdującą się na dodatkowej etykiecie
uczynić dodatkową etykietę niewidoczną (setVisible(false)).
Uwagi:
Etykiety tworzące szachownicę dodajemy do kontenera getContentPane() głównego okna.
Etykietę służącą do wizualizacji przeciąganej ikony dodajemy do warstwy
JLayeredPane.DRAG_LAYER kontenera getLayeredPane() metodą
add(Component, int) z klasy JLayeredPane.
Dodatkowa etykieta ma być widoczna tylko podczas wleczenia (setVisible()).
Aby tła etykiet tworzących szachownicę były widoczne, należy wydać im polecenie
setOpaque(true).
Zadania dodatkowe:
Uniemożliwić upuszczenie ikony na jedną z etykiet - np. zawierającą już jakąś ikonę.
Przeciągać tylko po naciśnięciu klawisza myszy w obszarze ikony.
Użyteczne funkcje:
Z tych metod trzeba będzie korzystać:
Klasa JLabel
setOpaque() - ustala przezroczystość.
setVisible() - ustala widoczność.
setPreferredSize() - preferowany rozmiar.
setHorizontalAlignment() - położenie ikony w etykiecie.
getIcon(), setIcon() - pobranie i ustalenie ikony.
getX(), getY() - położenie lewego-górnego rogu.
setBounds() - umiejscowienie etykiety w kontenerze.
getLocation() - położenie etykiety.
Inne klasy:
JPanel : getComponentAt() - jaki komponent leży w miejscu podanym jako argument.
MouseEvent : getX(), getY() - gdzie wystąpiło zdarzenie.
Wyszukiwarka
Podobne podstrony:
cwicz10cwicz10cwicz10cwicz11Cwicz1cwicz11 15Cwicz12 2cwicz13cwicz11Cwicz11 2Cwicz11cwicz10 11cwicz13 14cwicz12Cwicz11KolokwiumCwicz12Cwicz10więcej podobnych podstron