public void mousePressed(MouseEvent event)
- Agar komponent
ustida bo'lsa, sichqoncha tugmasi bosilganda chaqiriladi.
public void mouseClicked(MouseEvent event)
- Sichqoncha
tugmasi bosilganda va bo'shatilganda chaqiriladi, sichqoncha kursori esa
komponentda statsionar bo'lib qoladi. Avvalo sichqonchani bosish va sichqonchani
bosish uchun qo'ng'iroq qilish kerak.
public void mouseReleased(MouseEvent event)
- Sichqoncha
tugmachasi bosilgandan so'ng bo'shatilganda chaqiriladi. Har doim qo'ng'iroq
qilishdan oldin mousePressed va mouseDragged-ga bir yoki bir nechta qo'ng'iroq.
public void mouseEntered(MouseEvent event)
- Sichqoncha
kursori komponent chegarasiga kirganda chaqiriladi.
public void mouseExited(MouseEvent event)
- Sichqoncha kursori
komponent chegaralarini tark etganda chaqiriladi.
MouseMotionListener
interfeysi usullari
public void mouseDragged(MouseEvent event)
- Sichqoncha
tugmasi bosilganda, sichqoncha tugmasi bosilganda va sichqoncha tugmachasi
bosilganda saqlanib qoladi. Oldin har doim sichqonchani bosish buyrug'i bor
edi. Drag voqealarining barchasi foydalanuvchi sichqonchani sudrab chiqara
boshlagan tarkibiy qismga yuboriladi.
public void mouseMoved(MouseEvent event)
- Sichqoncha
harakatlantirilganda (sichqoncha tugmachalari bosilmasa) komponent ustida
bo'lganida chaqiriladi. Barcha harakat voqealari sichqoncha hozir joylashtirilgan
komponentga yuboriladi.
4-rasm.
MouseListener
va
MouseMotionListener
interfeysi usullari.
MouseEvent sinfi metodlari
Yuqorida tavsiflangan usullar ( MouseEvent ) ni parametr sifatida qabul
qiladi. Ushbu ob'ektda tinglovchilarni nima qo'zg'atgani haqida ma'lumotlar mavjud.
Quyidagi metod MouseEvent sinfda voqea qaerda sodir bo’lishi ko'rsatadi. X va y-
koordinatalari tinglovchi tayinlangan komponentning koordinatalar tizimida
piksellarda joylashgan:
int getX ( )
int getY ( )
Dasturlash II fanidan 10-ma’ruza
4
Point GetPoint ( )
Hodisa sodir bo'lgan ( x, y ) pozitsiyasini, voqea sodir bo'lgan qismga nisbatan
qaytaradi. Qaysi tugmadan foydalanilganligini bilish uchun SwingUtilities sinfidagi
quyidagi usullardan foydalanishimiz mumkin . Usul nomida paydo bo'lgan tugma
ishlatilsa va ular noto'g'ri bo'lsa, ular haqiqiy qiymatga qaytariladi :
boolean SwingUtilities.isLeftMouseButton ( MouseEvent me)
boolean SwingUtilities.isMiddleMouseButton ( MouseEvent me)
boolean SwingUtilities.isRightMouseButton ( MouseEvent me)
Java 2 marta bosishni qo'llab-quvvatlamaydi. Qisqa vaqt ichida bosishlar
sonini aniqlash uchun int getClickCount( ) usulidan foydalanish mumkin. Ushbu
davrning davomiyligi platformaga bog'liq va odatda operatsion tizimning yordamchi
dasturlari yordamida o'rnatilishi mumkin. Ikki marta bosishni
if ( mevt.getClickCount () == 2) yordamida tekshirish mumkin .
int getClickCount ( ) -Foydalanuvchi tomonidan amalga oshirilgan tezkor va
ketma-ket chertishlarning sonini qaytaradi (shu jumladan ushbu hodisani). Masalan,
ikki marta bosish uchun 2 ni qaytaradi.
boolean isPopupTrigger ( ) - Sichqoncha hodisasi qalqib chiquvchi menyu
paydo bo'lishiga olib kelishi kerak bo'lsa, haqiqiy qiymatni qaytaradi. Qalqib
chiquvchi qo'zg'atgichlar platformaga bog'liq bo'lganligi sababli, agar sizning
dasturingizda qalqib chiquvchi menyular bo'lsa, siz sichqonchani bosgan va
sichqonchadan chiqargan barcha hodisalar uchun pop-up paydo bo'lishi mumkin
bo'lgan komponentlar uchun
isPopupTrigger
-ni chaqirishingiz kerak . Qalqib
chiquvchi menyu haqida qo'shimcha ma'lumot olish uchun "Popupmenyu" ni
ko'ring.
MouseEvent sinf quyidagi qulay usuli meros ComponentEvent .
Component getComponent- Voqeani qo'zg'atgan tarkibiy qismni qaytaradi.
Ushbu usuldan getSource usuli o'rniga foydalanishingiz mumkin. MouseEvent sinf
ko'plab foydali usullari meros qilib InputEvent :
int getWhen ( ) - Ushbu voqea sodir bo'lgan vaqtini qaytaradi. Vaqt belgisi
qanchalik baland bo'lsa, yaqinda voqea sodir bo'ldi.
boolean isAltDown ( )
boolean isControlDown ( )
boolean isMetaDown ( )
boolean isShiftDown ( )
Hodisa sodir bo'lgan paytda individual modifikator kalitlari holatini
qaytaradi.
int getModifiers ( ) - Hodisa yoqilganda barcha o'zgartirish tugmachalari va
sichqoncha tugmalarining holatini qaytaradi. Siz qachon bosib (yoki yangi
ajratilgan) qaysi sichqoncha tugmasini aniqlash uchun, bu usuli foydalanishingiz
mumkin bo'lgan sichqon voqea ketishga majbur bo'ldi. InputEvent sinf bilan
foydalanish uchun ushbu qattiq belgilaydi getModifiers ALT_MASK,
BUTTON1_MASK, BUTTON2__MASK, BUTTON3_MASK, CTRL_MASK,
meta_mask: usuli. Masalan, agar o'ng tugma bosilgan bo'lsa, quyidagi ibora to'g'ri
Dasturlash II fanidan 10-ma’ruza
5
bo'ladi:
(mouseEvent.getModifiers() & InputEvent.BUTTON3_MASK)==
InputEvent.BUTTON3_MASK
Sichqoncha voqealarin boshqarish
Sichqoncha
hodisalarini
boshqarish
uchun
MouseListener
va
MouseMotionListener
tadbir-tinglovchisi keltirilgan. Sichqoncha hodisalarini
java.awt.Component-dan kelib chiqqan har qanday GUI komponentalari uchun
qayta ishlash mumkin.
"MouseListener" va "MouseMotionListener" ning barcha usullarini o'z ichiga
olgan yagona interfeys yaratish uchun MouseListener va MouseMotionListener
interfeyslarini
kengaytiradigan
MouseInputListener
interfeysi
mavjud.
MouseListener va MouseMotionListener usullari sichqoncha Komponent bilan
o'zaro aloqada bo'lganda, agar ushbu komponent uchun voqea-tinglovchi ob'ektlari
ro'yxatdan o'tgan bo'lsa chaqiriladi.
Sichqoncha hodisalarini boshqarishning har bir usuli argument sifatida
MouseEvent ob'ekti bo'lib, sichqonchaning yuz bergan hodisasi va uning joylashgan
joyining x va y koordinatalari to'g'risidagi ma'lumotlarni o'z ichiga oladi. Ushbu
koordinatalar voqea sodir bo'lgan GUI komponentining yuqori chap burchagidan
o'lchanadi. X koordinatalari 0 dan boshlanadi va chapdan o'ngga ko'payadi. Y
koordinatalari 0 dan boshlanadi va yuqoridan pastgacha ko'tariladi. InputEvent
(MouseEvent-ning
superklass)
usullari
va
konstantalari
foydalanuvchi
sichqonchaning qaysi tugmachasini bosganligini aniqlashga imkon beradi.
Java shuningdek, dasturlarga sichqoncha g'ildiragining aylanishiga javob
berish uchun
MouseWheelListener
interfeysini taqdim etadi. Ushbu interfeys
MouseWheelEvent
ni argument sifatida qabul qiladigan
mouseWheelMoved
usulini
e'lon qiladi.
MouseWheelEvent
(Sichqoncha-hodisaning kichik bir sinf) tadbir
boshqaruvchisiga g'ildiraklarning aylanish miqdori to'g'risida ma'lumot olishga
imkon beradigan usullarni o'z ichiga oladi.
JPanel-da sichqoncha hodisalarini kuzatish
MouseTracker ilovasi (5–6-rasmlar) MouseListener va MouseMotionListener
interfeysi usullarini namoyish etadi. Hodisalarni boshqarish klassi (5 -rasmning 36-
97-satrlari) ikkala interfeysni ham amalga oshiradi. Sizning sinfingiz ikkalasini ham
amalga oshirganda, siz ikkita interfeysdan ettita usulni e'lon qilishingiz
kerak. Ushbu misoldagi har bir sichqoncha hodisasi JLabel-dagi holat oynasi pastki
qismida biriktirilgan statusBar deb nomlangan satrni ko'rsatadi.
1 // 5-rasm: MouseTrackerFrame.java
2 // Sichqoncha hodisasini boshqarish.
3 import java.awt.Color;
4 import java.awt.BorderLayout;
5 import java.awt.event.MouseListener;
6 import java.awt.event.MouseMotionListener;
7 import java.awt.event.MouseEvent;
Dasturlash II fanidan 10-ma’ruza
6
8 import javax.swing.JFrame;
9 import javax.swing.JLabel;
10 import javax.swing.JPanel;
11
12 public class MouseTrackerFrame extends JFrame
13 {
14 private final JPanel mousePanel; // sichqoncha hodisalari sodir
bo'ladigan panel
15 private final JLabel statusBar; // voqea ma'lumotlarini namoyish etadi
16
17 // MouseTrackerFrame konstruktori GUI-ni o'rnatadi va
18 // sichqoncha hodisalari bilan ishlov beruvchilarni ro'yxatdan o'tkazadi
19 public MouseTrackerFrame()
20 {
21 super("Demonstrating Mouse Events");
22
23 mousePanel = new JPanel();
24 mousePanel.setBackground(Color.WHITE);
25 add(mousePanel, BorderLayout.CENTER); // panelni JFrame-ga qo'shish
26
27 statusBar = new JLabel("Mouse outside JPanel");
28 add(statusBar, BorderLayout.SOUTH); // JFrame-ga label qo'shing
29
30 // sichqoncha va sichqoncha harakati hodisalari uchun tinglovchilarni
yaratish va ro'yxatdan o'tkazish
31 MouseHandler handler = new MouseHandler();
32 mousePanel.addMouseListener(handler);
33 mousePanel.addMouseMotionListener(handler);
34 }
35
36 private class MouseHandler implements MouseListener,
37 MouseMotionListener
38 {
39 // MouseListener event handlers
40 // handle event when mouse released immediately after press
41 @Override
42 public void mouseClicked(MouseEvent event)’
43 {
44 statusBar.setText(String.format("Clicked at [%d, %d]",
45 , ));
46 }
47
48 // handle event when mouse pressed
Dasturlash II fanidan 10-ma’ruza
7
49 @Override
50
51 {
52 statusBar.setText(String.format("Pressed at [%d, %d]",
53 , ));
54 }
55
56 // handle event when mouse released
57 @Override
58
59 {
60 statusBar.setText(String.format("Released at [%d, %d]",
61 , ));
62 }
63
64 // handle event when mouse enters area
65 @Override
66
67 {
68 statusBar.setText(String.format("Mouse entered at [%d, %d]",
69 , ));
70
71 }
72
73 // handle event when mouse exits area
74 @Override
75
76 {
77 statusBar.setText("Mouse outside JPanel");
78
79 }
80
81 // MouseMotionListener event handlers
82 // handle event when user drags mouse with button pressed
83 @Override
84
85 {
86 statusBar.setText(String.format("Dragged at [%d, %d]",
87 , ));
88 }
89
90 // handle event when user moves mouse
91 @Override
Dasturlash II fanidan 10-ma’ruza
8
92
93 {
94 statusBar.setText(String.format("Moved at [%d, %d]",
95 , ));
96 }
97 } // end inner class MouseHandler
98 } // end class MouseTrackerFrame
1 // Fig. 5: MouseTrackerFrame.java
2 // Testing MouseTrackerFrame.
3 import javax.swing.JFrame;
4
5 public class MouseTracker
6 {
7 public static void main(String[] args)
8 {
9 MouseTrackerFrame mouseTrackerFrame = new
MouseTrackerFrame();
10
mouseTrackerFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
11 mouseTrackerFrame.setSize(300, 100);
12 mouseTrackerFrame.setVisible(true);
13 }
14 } // end class MouseTracker
5-rasm. Sichqoncha bilan ishlov berish.
6-rasm MouseTrackerFrame dasturini sinab ko'rish.
23-qator JPanel mousePanel-ni yaratadi. Ushbu JPanel dasturidagi
sichqonchani voqealari. 24-qatorda mousePanel-ning orqa rangi oq rangga
o'rnatiladi. Sichqonchani panelga o'tkazganda, dastur sichqonchaning panelini orqa
Dasturlash II fanidan 10-ma’ruza
9
rangini yashil rangga o'zgartiradi. Foydalanuvchi sichqonchani mousePanel-dan
tashqariga chiqarganda, dastur fon rangini oq rangga o'zgartiradi. 25-qator JPrame-
ga mousePanel-ni biriktiradi. Odatda JFrame-da GUI komponentlarining tartibini
ko'rsatishingiz kerak. Ushbu 1-darsda biz FlowLayout tartib menejerini
tanishtirdik. Bu erda biz JFrame-ning tarkibiy qismining odatiy joylashuvidan
foydalanamiz - BorderLayout, bu NORTH, Janubi, Sharqiy, WEST va CENTER
mintaqalarini tashkil etadi. NORTH idishning yuqori qismiga to'g'ri keladi. Ushbu
misolda CENTER va JANUBIY mintaqalar qo'llaniladi. 25-satrda CENTER
mintaqasida mousePanel-ni joylashtirish uchun qo'shishning ikkita argumentli
versiyasi qo'llaniladi. BorderLayout boshqa qismlarda komponentlar egallamagan
JFrame-dagi barcha joylarni ishlatish uchun CENTER-da avtomatik ravishda
komponentni o'lchaydi.
Konstruktorda 27-28-qatorlar JLabel statusBar deb e'lon qiladi va uni JFrame-
ning JANUBIY mintaqasiga biriktiradi. Ushbu JLabel JFrame kengligini
egallaydi. Mintaqaning balandligi JLabel tomonidan belgilanadi.
31-qator sichqonchaning hodisalariga javob beradigan ishlov beruvchi deb
nomlangan ichki sinf MouseHandler (chiziqlar 36-97) namunasini yaratadi. 32-33-
qatorlar sichqonchani
-
Panelning
sichqoncha
tadbirlarini
tinglovchi
sifatida ro'yxatga olish vositalarini ro'yxatdan o'tkazadi. AddMouseListener va
addMouseMotionListener usullari bilvosita komponent komponentidan meros qilib
olingan va MouseListeners va MouseMotionListeners-larni ro'yxatdan o'tkazish
uchun
ishlatilishi
mumkin. MouseHandler
ob'ekti
MouseListener
va
MouseMotionListener hisoblanadi, chunki sinf ikkala interfeysni ham amalga
oshiradi. Bu erda ikkala interfeysni amalga oshirishni tanladik, lekin bittadan
ko'proq interfeysni o'z ichiga oladigan sinfni namoyish etish uchun biz
MouseInputListener interfeysini amalga oshirishimiz mumkin edi.
Sichqoncha mousePanel maydoniga kirganda va undan chiqib ketganda,
sichqonlarga o'rnatilgan (65-71-qatorlar) va mouseExited (74-79-qatorlar) usullari
mos ravishda chaqiriladi. Sichqoncha usuli, status panelidagi sichqoncha JPanel ga
kirganligi va fon rangini yashil rangga o'zgartirganligi to'g'risida xabarni
ko'rsatadi. Sichqoncha JPaneldan tashqarida ekanligi va birinchi rang chiqarish
oynasiga qaraganligi haqida xabar beradi.
Qolgan beshta voqea va u sodir bo'lgan koordinatalarni o'z ichiga olgan holat
panelida satr ko'rsatiladi. MouseEvent usullari getX va getY voqealar sodir bo'lgan
sichqonchaning x va y-koordinatalarini mos ravishda qaytaradi.
Adapter darslari
MouseListener va MouseMotionListener kabi ko'plab tadbirlarni tinglovchi
interfeyslari bir nechta usullarni o'z ichiga oladi. Har qanday usulni tadbirlarni
tinglovchi interfeysida e'lon qilish har doim ham istalmagan. Masalan, dasturga
faqat mouseClicked ishlov beruvchisi kerak bo'lishi mumkin
MouseListener yoki MouseMotionListener-dan sichqonchani tashlagan
ishlov berish vositasi. WindowListener interfeysi ettita oyna hodisalarini boshqarish
usullarini belgilaydi. Ko'p usullarga ega bo'lgan ko'plab tinglovchilar uchun
Dasturlash II fanidan 10-ma’ruza
10
java.awt.event va javax.swing.event paketlari voqealarni tinglovchi adapterlari
sinflarini ta'minlaydi. Adapter klassi interfeysni amalga oshiradi va har bir usulning
standart usulda bajarilishini ta'minlaydi (bo'sh usul bilan). 7-rasmda java.awt.event
adapterining bir nechta sinflari va ular amalga oshiradigan interfeyslar
ko'rsatilgan. Siz har bir usulning odatiy bajarilishini meros qilib olish uchun adapter
sinfini kengaytirishingiz mumkin va keyinchalik faqat voqealarni boshqarish uchun
kerak bo'lgan usul (usullarni) bekor qilishingiz mumkin.
Agar sinf interfeysni amalga oshirsa, sinf bu interfeys bilan o'zaro aloqaga
ega. Ushbu klassning barcha to'g'ridan-to'g'ri va bilvosita kichik sinflari ushbu
interfeysni meros qilib oladi. Shunday qilib, voqea-adapter sinfini kengaytiradigan
sinf ob'ekti tegishli voqea-tinglovchi turining ob'ekti (masalan, MouseAdapter
kichik sinfining ob'ekti MouseListener).
Java.awt.event-dagi tadbir-
adapterlar sinfi
Amaliy interfeys
ComponentAdapter
ComponentListener
KonteynerAdapter
KonteynerListener
FokusAdapter
FocusListener
KeyAdapter
KeyListener
MouseAdapter
MouseListener
MouseMotionAdapter
MouseMotionListener
WindowAdapter
WindowListener
7-rasm Event-adapter darslari va ular amalga oshiradigan interfeyslar.
MouseAdapter-ni kengaytirish
Anjirni qo'llash. 8–9-rasmlar sichqonchani chertish sonini (sichqoncha
sonini) aniqlash va sichqonchaning turli tugmachalarini qanday ajratish kerakligini
ko'rsatib
beradi. Ushbu
dasturdagi
voqea
tinglovchisi
MouseAdapter-ni
kengaytiradigan MouseClickHandler ichki sinf ob'ektidir (8-rasm, 25-46-chiziqlar),
shuning uchun biz ushbu misolda kerak bo'lgan faqat mouseClicked usulini e'lon
qilishimiz mumkin.
1 // Fig. 8: MouseDetailsFrame.java
2 // Demonstrating mouse clicks and distinguishing between mouse buttons.
3 import java.awt.BorderLayout;
4 import java.awt.event.MouseAdapter;
5 import java.awt.event.MouseEvent;
6 import javax.swing.JFrame;
7 import javax.swing.JLabel;
8
9 public class MouseDetailsFrame extends JFrame
10 {
11 private String details; // String displayed in the statusBar
12 private final JLabel statusBar; // JLabel at bottom of window
Dasturlash II fanidan 10-ma’ruza
11
13
14 // constructor sets title bar String and register mouse listener
15 public MouseDetailsFrame()
16 {
17 super("Mouse clicks and buttons");
18
19 statusBar = new JLabel("Click the mouse");
20 add(statusBar, BorderLayout.SOUTH);
21
22 }
23
24 // inner class to handle mouse events
25 private class MouseClickHandler extends MouseAdapter
26 {
27 // handle mouse-click event and determine which button was pressed
28 @Override
29 public void mouseClicked(MouseEvent event)
30 {
31 int xPos = event.getX(); // get x-position of mouse
32 int yPos = event.getY(); // get y-position of mouse
33
34 details = String.format("Clicked %d time(s)",
35 );
36
37 if ( // right) mouse button
38 details += " with right mouse button";
39 else if ( // midd)le mouse button
40 details += " with center mouse button";
41 else // left mouse button
42 details += " with left mouse button";
43
44 statusBar.setText(details); // display message in statusBar
45 }
46 }
47 } // end class MouseDetailsFrame
1 // Fig. 8: MouseDetails.java
2 // Testing MouseDetailsFrame.
3 import javax.swing.JFrame;
4
5 public class MouseDetails
6 {
7 public static void main(String[] args)
Dasturlash II fanidan 10-ma’ruza
12
8 {
9 MouseDetailsFrame mouseDetailsFrame = new MouseDetailsFrame();
10 mouseDetailsFrame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
11 mouseDetailsFrame.setSize(400, 150);
12 mouseDetailsFrame.setVisible(true);
13 }
14 } // end class MouseDetails
8-rasm Sichqonchani bosishni namoyish etish va sichqoncha tugmachalarini
farqlash
9-rasm | MouseDetailsFrame-ni sinab ko'rish.
Umumiy dasturlash xato
Agar siz adapterlar sinfini kengaytirsangiz va siz bekor qilgan usul nomini
noto'g'ri yozsangiz va @Override bilan usulni e'lon qilmasangiz, sizning usulingiz
sinfda boshqa usulga aylanadi. Bu aniqlash qiyin bo'lgan mantiqiy xatodir, chunki
dastur adapter sinfidan meros qolgan usulning bo'sh versiyasini chaqiradi.
Java dasturidan foydalanuvchi bir, ikki yoki uch tugmali sichqonchali tizimda
bo'lishi mumkin. MouseEvent klassi InputEvent sinfidan bir nechta usulni meros
qilib oladi, ular sichqonchani ko’p tugmachalarni ajratib turishi yoki birlashtirilgan
tugmachani bosish va sichqonchani bosish bilan ko'p tugmali sichqonchani taqlil
qilishi mumkin. 10-rasmda sichqonchani bosishni farqlash uchun ishlatiladigan
InputEvent usullari ko'rsatilgan. Java har bir sichqonchada sichqonchaning chap
tugmasi mavjudligini taxmin qiladi. Shunday qilib, sichqonchani chap tugmachasini
bosishni sinash juda oson. Shunga qaramay, bir yoki ikki tugmali sichqonchani
ishlatgan foydalanuvchilar sichqonchada mavjud bo'lmagan tugmachalarni taqlil
qilish uchun tugmachalar va tugmalarni bosish kombinatsiyasidan foydalanishlari
kerak. Bir yoki ikki tugmachali sichqonchaning holatida Java ilovasi agar
foydalanuvchi Alt tugmachasini bosib ushlab tursa va chap tugmachani ikki
tugmachali sichqonchani yoki bitta tugmachani bosgan bo'lsa sichqonchaning
markaziy tugmasi bosilishini Java dasturida qabul qilinadi. bitta tugmachali
Dasturlash II fanidan 10-ma’ruza
13
sichqoncha. Agar bitta tugmachali sichqonchada Java dasturi agar foydalanuvchi
Meta tugmachasini ushlab tursa (ba'zida bu buyruq yoki Mac-dagi "Apple"
tugmachasi deb ataladi) va sichqonchani bosganda sichqonchaning o'ng tugmasi
bosilishini taxmin qiladi. .
InputEvent usuli
Ta'rif
isMetaDown ()
Foydalanuvchi sichqonchaning o'ng yoki sichqonchani ikki
yoki uchta tugmachasini bosganda, true qaytaradi. Bir
tugmali sichqonchani sichqonchaning o'ng tugmachasini
bosishni taqlid qilish uchun foydalanuvchi klaviaturadagi
Meta tugmachasini bosib ushlab turib sichqoncha tugmasini
bosishi mumkin.
isAltDown ()
Foydalanuvchi sichqonchaning o'rta tugmachasini uchta
tugmachani bosganda true qaytaradi. Sichqonchaning o'rta
tugmachasini taqlid qilish uchun bitta yoki ikki tugmali
sichqonchani bosish uchun foydalanuvchi Alt tugmachasini
bosishi va mos ravishda sichqonchaning bitta yoki chap
tugmachasini bosishi mumkin.
10-rasm Sichqonchaning o'ng yoki markaziy tugmasi bosilganligini
aniqlashga yordam beradigan InputEvent usullari.
8-rasmning 21-qatorida MouseDetailsFrame uchun MouseListener ro'yxatga
olinadi. Hodisa tinglovchisi MouseAdapter-ni kengaytiradigan MouseClickHandler
sinfining ob'ekti. Bu bizga faqat mouseClicked usulini e'lon qilish imkonini beradi
(28-45-qatorlar). Ushbu usul avval voqea sodir bo'lgan koordinatalarni yozib oladi
va ularni xPos va yPos mahalliy o'zgaruvchilarida saqlaydi (chiziqlar 31-32). 34–
35-chiziqlar sichqonchani yashirin bosgan sonini o'z ichiga olgan sichqonchani
bosish sonini o'z ichiga olgan skriptni yaratadi, uni MouseEvent usuli
GetClickCount 35-qatorda qaytaradi. 37-42-qatorlar isMetaDown va isAltDown
usullaridan foydalanib, foydalanuvchi sichqonchaning qaysi tugmachasini
bosganini va unga qo'shilishni belgilaydi. har bir holatda batafsil String. Olingan
natija
Satr holati satrida ko'rsatiladi. Sinf MouseDetails (9-rasm) dasturni
bajaradigan asosiy usulni o'z ichiga oladi . Sichqoncha sonini ko'paytirishni ko'rish
uchun sichqonchaning har bir tugmachasini takroran bosib ko'ring.
Sichqoncha bilan rasm chizish uchun JPanel kichik sinf
Biz JPanel-dan foydalanuvchini sichqonchani sudrab chizish uchun maxsus
chizilgan maydon sifatida foydalanamiz. Bundan tashqari, ushbu bo'limda adapter
sinfini kengaytiradigan tadbir tinglovchisi namoyish etiladi.
Usul bo'yoqKomponent
JComponent sinfini (JPanel kabi) kengaytiradigan engil Swing qismlariga
(masalan, JPanel), engil Swing komponentasi namoyish etilganda chaqiriladigan
paintComponent usuli kiradi. Ushbu usulni bekor qilsangiz, Java-ning grafik
Dasturlash II fanidan 10-ma’ruza
14
imkoniyatlaridan
foydalanib
shakllarni
qanday
chizishni
ko'rsatishingiz
mumkin. JPanel-ni maxsus chizilgan maydon sifatida foydalanish uchun sozlashda,
quyi sinf "paintComponent" usulini bekor qilishi va tarkibiy qismning to'g'ri
ko'rsatilishini ta'minlash uchun over metodining tanasidagi birinchi variant sifatida
paint-Component versiyasini chaqirish kerak. Sababi shundaki, JComponent kichik
sinflari transparentsiyani qo'llab-quvvatlaydi. Tarkibni to'g'ri ko'rsatish uchun dastur
komponentning
shaffofligini
aniqlashi
kerak. Buni
aniqlaydigan
kod
JComponentning paintComponent superklassida. Agar komponent shaffof bo'lsa,
paintComponent
dastur
komponentni
ko'rsatganda
uning
fonini
o'chirmaydi. Kompozitsiya noaniq bo'lsa, paintComponent kompozitsiyani
namoyish qilishdan oldin uning tarkibini o'chiradi. Swing yengil tarkibiy qismining
shaffofligi setOpaque usuli bilan o'rnatilishi mumkin (noto'g'ri dalillar
komponentning shaffof ekanligini ko'rsatadi).
Shaxsiy rasm chizish maydonini aniqlash
Anjirning Rassom qo'llanmasi. 11–12-rasmlar, maxsus chizilgan maydonni
yaratish uchun ishlatiladigan JPanel-ning tayyorlangan kichik sinfini namoyish
etadi. Ilova mouseDragged-dan foydalanadi. oddiy rasm chizish dasturini yaratish
uchun voqea ishlov beruvchisi. Foydalanuvchi JPanel-ga sichqonchani sudrab
rasmlarni chizishi mumkin. Ushbu misol sichqonchani bosish usulidan
foydalanmaydi, shuning uchun bizning tadbir-tinglovchilar sinfimiz (11-rasmning
20-29-qatorlarida anonim ichki sinf) MouseMotionAdapter-ni qamrab oladi. Ushbu
sinf mouseMoved va mouseDragged-ni e'lon qilganligi sababli, ushbu ilova talab
qiladigan xodisalarni boshqarish uchun mouseDragged-ni bekor qilishimiz mumkin.
1 // Fig. 11: PaintPanel.java
2 // Adapter class used to implement event handlers.
3 import java.awt.Point;
4 import java.awt.Graphics;
5 import java.awt.event.MouseEvent;
6 import java.awt.event.MouseMotionAdapter;
7 import java.util.ArrayList;
8 import javax.swing.JPanel;
9
10 public class PaintPanel extends JPanel
11 {
12 // list of Point references
13
14
15 // set up GUI and register mouse event handler
16 public PaintPanel()
17 {
18 // handle frame mouse motion event
19 addMouseMotionListener(
Dasturlash II fanidan 10-ma’ruza
15
20 // anonymous inner class
21 {
22 // store drag coordinates and repaint
23 @Override
24
25 {
26 points.add( );
27
28 }
29 }
30 );
31 }
32
33 // draw ovals in a 4-by-4 bounding box at specified locations on window
34 @Override
35 public void paintComponent(Graphics g)
36 {
37 super.paintComponent(g); // clears drawing area
38
39 // draw all points
40 for (Point point : points)
41 g.fillOval( , 4, 4);
42 }
43 } // end class PaintPanel
11-rasm Voqea ishlov beruvchilarini amalga oshirish uchun ishlatiladigan
adapter sinf
Sinf PaintPanel (11-rasm) maxsus rasm chizish maydonini yaratish uchun
JPanel-ni kengaytiradi. Class Point (java.awt to'plami) xy koordinatasini
bildiradi. Biz ushbu klass ob'ektlaridan sichqonchani sudrab olib o'tadigan har bir
hodisaning koordinatalarini saqlash uchun foydalanamiz. Class Grafika chizish
uchun ishlatiladi. Ushbu misolda biz ArrayList of Points (satr 13) dan sichqonchani
sudrab olib o'tishda har bir voqea sodir bo'lgan joyni saqlash uchun
foydalanamiz. Ko'rinib turibdiki, chizish uchun paintComponent usuli ushbu
ballardan foydalanadi.
19-30-qatorlarda PaintPanel-ning sichqonchani harakatini tinglash uchun
MouseMotionListener-ni
ro'yxatdan
o'tkazing. 20-29
qatorlar
MouseMotionAdapter adapter sinfini kengaytiradigan noma'lum ichki sinf ob'ektini
yaratadi. Eslatib o'tamiz, MouseMotionAdapter dasturi Mouse-MotionListener
dasturini
amalga
oshiradi,
shuning
uchun
noma'lum
ichki
ob'ekt
MouseMotionListener hisoblanadi. Anonim ichki sinf odatiy mouseMoved va
mouseDragged dasturlarini meros qilib oladi, shuning uchun allaqachon
interfeysning
barcha
usullarini
amalga
oshiradi. Biroq,
Dasturlash II fanidan 10-ma’ruza
16
standart dasturlar chaqirilganda
hech
narsa
qilmaydi. Shunday
qilib,
biz
sichqonchani sudrab olish hodisasining koordinatalarini olish va ularni Point ob'ekti
sifatida saqlash uchun 23-28 chiziqlarda sichqonchani chizish usulini bekor
qilamiz. 26-qatorda voqea sodir bo'lgan joyni olish uchun MouseEvent-ning
getPoint usulidan foydalaniladi va uni ArrayList-da saqlaydi. 27-qatorda
PaintPanel-ning bo'yoq komponenti usuliga qo'ng'iroq qilish orqali PaintPanel-ni
ekranda iloji boricha tezroq yangilash kerakligini ko'rsatish uchun qayta bo'yash
usullari (to'g'ridan-to'g'ri sinf komponentidan meros qilib olingan).
Grafika parametrini oladigan paintComponent usuli (34-42-qatorlar)
PaintPanel ekranda har doim kerak bo'lganda avtomatik ravishda chaqiriladi,
masalan GUI birinchi marta namoyish qilinganda yoki ekranda yangilanganida -
masalan, usulni bo'yashda. deb nomlanadi yoki GUI komponentasi ekrandagi
boshqa oynada yashiringan va keyinchalik yana paydo bo'lganda.
37-qatorda PaintPanel-ning fonini tozalash uchun paintComponent-ning
superklass versiyasi chaqiriladi (JPanels sukut bo'yicha noaniq). 40–41-chiziqlar
ArrayList-dagi har bir nuqta tomonidan belgilangan joyda oval chizadi. Grafika
usuli fillOval qattiq ovalni chizadi. Usulning to'rtta parametrlari tasvirlar
ko'rsatilgan
to'rtburchaklar
maydonni
(chegara
qutisi
deb
ataladi)
ifodalaydi. Birinchi ikkita parametr to'rtburchaklar maydonning yuqori chap chap x
koordinatasi va yuqori chap chap y-koordinatadir. Oxirgi ikkita koordinatalar
to'rtburchaklar maydonning kengligi va balandligini anglatadi. FillOval usuli
to'rtburchaklar maydonning har bir tomonining o'rtasiga tegib turadigan tarzda
tasvirni tortadi. 41-satrda, birinchi ikkita dalillar classning ikkita umumiy
namunadagi o'zgaruvchilari - x va y-dan foydalanib aniqlanadi.
Ilovada Custom JPanel-dan foydalanish
Klassik rassom (12-rasm) ushbu dasturni bajaradigan asosiy usulni o'z ichiga
oladi. 14-qatorda PaintPanel ob'ekti yaratilib, unga foydalanuvchi sichqonchani
tortishi mumkin. 15- qatorga PaintPanel-dan JFrame-ga o’tish.
1 // Fig. 12: Painter.java
2 // Testing PaintPanel.
3 import java.awt.BorderLayout;
4 import javax.swing.JFrame;
5 import javax.swing.JLabel;
6
7 public class Painter
8 {
9 public static void main(String[] args)
10 {
11 // create JFrame
12 JFrame application = new JFrame("A simple paint program");
13
14 PaintPanel paintPanel = new PaintPanel();
Dasturlash II fanidan 10-ma’ruza
17
15 application.add(paintPanel, BorderLayout.CENTER);
16
17 // create a label and place it in SOUTH of BorderLayout
18 application.add(new JLabel("Drag the mouse to draw"),
19 BorderLayout.SOUTH);
20
21 application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
22 application.setSize(400, 200);
23 application.setVisible(true);
24 }
25 } // end class Painter
12-rasm
12-rasm | PaintPanel dasturini sinab ko'rish.
Document Outline - Tishqoncha voqiyalari va ularni qayta ishlash
- REJA
- 1. Sichqoncha Swing komponentasida
- 2. public void mousePressed(MouseEvent event)
- 3. public void mouseClicked(MouseEvent event)
- 4. public void mouseReleased(MouseEvent event)
- 5. public void mouseEntered(MouseEvent event)
- 6. public void mouseExited(MouseEvent event)
- 7. public void mouseDragged(MouseEvent event)
- 8. public void mouseMoved(MouseEvent event)
- 9. MouseEvent sinfi metodlari
- Sichqoncha Swing komponentasida
- MouseEvent sinfi metodlari
Do'stlaringiz bilan baham: |