Tishqoncha voqiyalari va ularni qayta ishlash reja sichqoncha Swing komponentasida 2


public void mousePressed(MouseEvent event)



Download 0,74 Mb.
Pdf ko'rish
bet2/2
Sana01.07.2022
Hajmi0,74 Mb.
#724025
1   2
Bog'liq
Dasturlash II fanidan 10-ma’ruza

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 

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 

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 

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 

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 

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; 

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 

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; 

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; 

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; 

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; 

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

Download 0,74 Mb.

Do'stlaringiz bilan baham:
1   2




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish