import.java.awt.*;O dabar apžvelkime jau minėtus ir neminėtus įrankius, sudėję juos į vieną langą.
import.java.awt.event.*;Tačiau pasyviai stebėti įvykius maža - programa turi į juos reaguoti taip, kaip mums reikia. Kokius veiksmus reikia atlikti galime nurodyti tik mes patys.
import java.awt.*; import java.awt.event.*; class ManoLangas extends Frame { public ManoLangas() { setSize(400,300); // Programos lango matmenys setTitle("Mano programos langas");// antraštė // Čia nurodome kitus darbus, kuriuos turi nuveikti klasės konstruktorius show();//Sukurtą langą reikia parodyti! // Keturios eilutės nurodo, kaip reaguoti į įprastinį įvykį // pelės klavišo spragtelėjimą lango kamputyje: langas uždaromas addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } }); } // //Kaip visada - reikalingas pagrindinis metodas, kuriuo prasideda darbas public static void main(String args[]) { new ManoLangas(); } }Ši programa nieko nedaro - sukuria langą ir tiek. Sukurti gyvenimą jame - jūsų uždavinys.
Label antr1= new Label(); Label antr2= new Label("Pirma antraštė"); Label antr3= new Label("Antra antraštė", Label.CENTER); Button mygt1= new Button(); Button mygt2= new Button("Mygtukas");Nesudėtinga sukurti ir kitas komponentes. Bus patogiau, jei kitų komponenčių konstruktorius ir jų parametrus aptarsime kartu su metodais. O dabar apžvelkime, kaip sukurtus objektus išdėstyti.
import java.awt.*; import java.awt.event.*; class Isdest extends Frame { public Isdest() { setSize(400,100); setTitle("Mano programos langas"); setLayout(new FlowLayout()); Button [] mygt= new Button [4]; String [] antr ={"Pirmas", "Antras","Trecias", "Ketvirtas"}; for (int i=0; i<4; i++){ mygt[i]=new Button(antr[i]); add(mygt[i]); } show(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } });} public static void main(String args[]) { new Isdest();} }Atsisiųskite programos tekstą.
..... setLayout(new FlowLayout()); .... add("North",mygt[0]); add("East",mygt[1]); ....BorderLayout išdėstymas
......... setLayout(new GridLayout(2,2)); .........GridLayout išdėstymas
setLayout(null);ir patys rūpintis tinkamu komponenčių išdėstymu. Tokiu atveju teks naudotis metodu
setBounds(int x, int y, int plotis, int aukštis);Metodo parametrai x ir y reiškia komponentės viršutinio kairiojo kampo koordinatę, o parametrai plotis ir aukštis - tiesiog komponentės plotį ir aukštį. Taigi kvadratinį mygtuką mygt su kraštinę lygia 50 pt į lango viršutinį kampą galime padėti taip:
mygt.setBounds(0,0,50,50);Galime nurodyti ne tik komponentės vietą ir matmenis. Yra daug visoms komponentėms bendrų metodų, kuriais galime keisti jų savybes. Pavyzdžiui, norimas komponenčių fono ir teksto spalvas galime nustatyti panaudoję metodus
setBackground(Color c); setForeground(Color c);Skliausteliuose nurodyta, kad naudojantis šiais metodais reikia nurodyti parametrą c, kurio reikšmė - norima spalva. Panagrinėkime sudėtingesnį komponenčių išdėstymo programos lange būdą. Idėja tokia: dalį komponenčių išdėstome ant vienos lentos, kitą dalį - ant kitos. O po to - tas lentas ,,įkeliame" į pagrindinį langą. Kiekvienai lentai galima naudoti savą išdėstymo objektą. Tos ,,lentos" - tai nauji objektai Panel. Geriausia visa tai parodyti pavyzdžiu: ant vienos ,,lentos" išdėstysime vieną mygtukų grupę, ant kitos - kitą, o tas ,,lentas" sudėsime pasinaudoję BorderLayout išdėstymu. Be to mygtukams spalvinti panaudosime dvi spalvas.
Komponentė | Įvykis | Kada įvyksta | Kas registruoja | Reagavimo metodas |
Button | ActionEvent | Kai paspaudžiame mygtuką | ActionListener | actionPerformed() | TextField | ActionEvent | Kai baigiame redaguoti tekstą | ActionListener | actionPerformed() |
Checkbox | ItemEvent | Kai uždedame ar nuimame žymeklio ,,varnelę" | ItemListener | itemStateChanged() |
CheckboxMenuItem | ItemEvent | Kai uždedame ar nuimame žymeklio ,,varnelę" | ItemListener | itemStateChanged() |
List | 1.ActionEvent 2. ItemEvent | 1.Kai dukart spragtelime sąrašo elementą 2. Kai pasirenkame sąrašo elementą ar atsisakome pasirinkimo. |
ActionListener ItemListener | actionPerformed() itemStateChanged() |
Choice | ItemEvent | Kai pasirenkame išsiskleidusio sąrašo elementą | ItemListener | itemStateChanged() |
import java.applet.*; import java.awt.*; import java.awt.event.*; public class MygtIvyk extends Applet implements ActionListener{ Button [] mygt= new Button [4]; public void init() { setLayout(new GridLayout(2,2)); String [] antr ={"Pirmas", "Antras","Trecias", "Ketvirtas"}; for (int i=0; i<4; i++){ mygt[i]=new Button(antr[i]); mygt[i].addActionListener(this); add(mygt[i]); }} public void actionPerformed(ActionEvent ivyk) { if (ivyk.getSource()==mygt[0]) mygt[0].setBackground(Color.white); if (ivyk.getSource()==mygt[1]) mygt[1].setBackground(Color.pink); if (ivyk.getSource()==mygt[2]) mygt[2].setBackground(Color.red); if (ivyk.getSource()==mygt[3]) mygt[3].setBackground(Color.blue); }}Pažiūrėkite, kaip veikia. Atsisiųskite programos tekstą.
Button() Button(String Užrašas)Paminėsime dar du metodus: vieną naudojame, norėdami gauti mygtuko užrašą, kitą - norėdami suteikti mygtukui užrašą. Šių metodų sintaksė tokia:
public String getLabel() public void setLabel(String Užrašas)Teksto laukus ir sritis taip pat jau naudojome.
TextField() TextField(String Pradinis_tekstas) TextField(int plotis) TextField(String Pradinis_tekstas, int plotis)Konstruktorių parametrų prasmė, tikiuosi, aiški iš pavadinimų. Dažniausiai naudojamės šiais TextField metodais:
public void setText(String Užrašomas_tekstas) public String getText()Antrąjį metodą naudojame, norėdami tekstą iš lauko priskirti String tipo kintamajam, kad po to galėtume atlikti mums reikalingus veiksmus.
TextArea() TextArea(String Pradinis_tekstas) TextArea(int eilučių_sk, int stulpelių_sk) TextArea(String Pradinis_tekstas, int eilučių_sk, int stulpelių_sk ) TextArea(String Pradinis_tekstas, int eilučių_sk, int stulpelių_sk, peržiūra)Penktajame konstruktoriuje parametro peržiūra vietoje galime naudoti šiuos žodžius:
SCROLLBARS_BOTH, SCROLLBARS_VERTICAL_ONLY, SCROLLBARS_HORIZONTAL_ONLY, SCROLLBARS_NONJie nurodo, kurias peržiūros juostas reikia pridėti. Komponentė TextArea kaip ir TextField turi metodus getText() ir setText(). Norėdami pridėti dar vieną eilutę prie teksto srityje užrašyto teksto galime naudoti metodą
append(String Nauja_eilutė)
Checkbox() Checkbox(String Užrašas) CheckBox(String Užrašas, boolean padėtis)Jeigu parametro "padėtis" reikšmė yra true, tai sukuriamas žymeklis jau su pažymėta ,,varnele".
public boolean getState() public boolean setState(boolean padėtis) public String getLabel() public void setLabel(String Užrašas)Iš pavadinimų aišku, kad šiais metodais galime sužinoti ir keisti žymeklių užrašus bei padėtis: pažymėta ar nepažymėta (true ar false).
CheckBoxGroup()sukuria tuščią grupę, į kurią žymekliai įtraukiami naudojantis specialiu CheckBox konstruktoriumi
CheckBox(String Žymė, boolean padėtis, CheckBoxGroup grupės_vardas)Metodai, kuriuos naudojame, norėdami sužinoti, kuris žymeklis pažymėtas ar norėdami pažymėti reikalingą žymeklį:
public CheckBox getSelectedBox() public void setSelectedCheckBox(CheckBox žymeklio_vardas)Štai vienas aptartųjų komponenčių panaudojimo programoje pavyzdys. Programoje panaudosime vieną žymeklį jng ir žymeklių grupę gr. Šia grupe galėsime naudotis tik tada, kai ,,varnelę" uždėsime žymeklyje jng. Grupės žymekliais valdysime lango fono spalvą.
import java.applet.*; import java.awt.*; import java.awt.event.*; public class Zymekliai extends Applet implements ItemListener{ Panel p; CheckboxGroup gr; Checkbox jng; Checkbox zym []; public void init() { setLayout(new BorderLayout()); gr = new CheckboxGroup(); zym= new Checkbox [4]; String [] antr ={"Mėlyna", "Magenta","Žalia", "Balta"}; p = new Panel(); for (int i=0; i<4; i++){ zym[i] = new Checkbox(antr[i], gr, false); zym[i].addItemListener(this); p.add(zym[i]); } p.setVisible(true); p.setEnabled(false); add("North",p); jng = new Checkbox("Leisti naudotis žymeklių grupe", false); jng.addItemListener(this); add("South", jng); } public void itemStateChanged(ItemEvent ivyk) { if (jng.getState()){p.setBackground(Color.pink); p.setEnabled(true);} else {p.setBackground(Color.white);p.setEnabled(false);} if (zym[0].getState()) setBackground(Color.blue); if (zym[1].getState()) setBackground(Color.magenta); if (zym[2].getState()) setBackground(Color.green); if (zym[3].getState()) setBackground(Color.white); } }Pažiūrėkite, kaip veikia. Atsisiųskite programos tekstą.
List() List(int eiluciu_skaicius) List(int eiluciu_skaicius, boolean pasirinkimas)Konstruktoriuje galime nurodyti, kiek eilučių turi turėti sąrašas. Jeigu sąrašą sukonstravome naudodami vieną iš pirmųjų konstruktorių, jame galima pasirinkti tik vieną įrašą. Jeigu reikalingas sąrašas su daugelio elementų pasirinkimo galimybe, naudokite trečiąji konstruktorių vietoje antrojo parametro nurodę true . Darbui su sąrašais yra daug naudingų metodų. Dalį jų išrašysime lentelėje. Elemento vieta metodų aprašyme nurodoma kintamuoju index . Sąrašo elementai numeruojami pradedant nuo nulio.
public void add (String elementas) | Į sąrašą įtraukia nurodytą elementą |
public void add (String elementas, int index) | Į sąrašą įtraukia nurodytą elementą nurodytoje pozicijoje |
public int getItemCount( ) | Nurodo, kiek elementų yra sąraše |
public void remove(String elementas) | Pašalina iš sąrašo nurodytą elementą |
public void remove(int index) | Pašalina iš sąrašo elementą, kurio numeris nurodytas |
public void removeAll( ) | Pašalina visus sąrašo elementus |
public void replaceItem(String naujas_elementas, int index) | Pakeičia vieną elementą kitu |
public String getSelectedItem( ) | Perduoda pasirinktą sąrašo elementą |
public int getSelectedIndex( ) | Perduoda pasirinkto elemento numerį |
public String [ ] getSelectedItems() | Sudaro masyvą iš pasirinktų elementų |
public int [ ] getSelectedIndexes() | Sudaro masyvą iš pasirinktų elementų numerių |
public boolean isIndexSelected(int index) | Perduoda reikšmę true, jei elementas, kurio numeris yra nurodytas, buvo pasirinktas |
public String getItem(int index) | Perduoda sąrašo elementą, kurio numeris nurodytas |
public String [ ] getItems() | Sudaro masyvą iš pasirinktų elementų numerių |
Choice ()Konstruktorius sukuria tuščią sąrašą. Elementus į šį sąrašą galime įtraukti metodu add(String elementas). Šį metodą naudojame ir List elementams įtraukti. Apskritai dauguma išvardytų lentelėje List metodų tinka ir Choice sąrašui. Suprantama, sąrašui Choice negalima naudoti tų metodų, kurie susiję su kelių elementų pasirinkimu.
Darbui su sąrašais iliustruoti parašėme programą, kurioje panaudojome du List sąrašus. Ką ši programa daro, tikriausiai suprasite, panagrinėję paveikslėlį. O panagrinėję žemiau pridėtą programėlės tekstą, galėtumėte išmokti naudotis sąrašo List metodais. Jeigu savo programoje norėsite naudoti ne List bet Choice tipo sąrašą - įvykiams registruoti naudokite ItemListener ! |
import java.awt.*; import java.awt.event.*; class Sarasai extends Frame implements ActionListener{ List desimtys, skaiciai; Button suma; TextField laukas; public Sarasai() { setSize(200,500); setTitle("Sąrašai "); setLayout(new GridLayout(6,1)); desimtys =new List(6); desimtys.add("1-10"); desimtys.add("11-20"); desimtys.add("21-30"); desimtys.add("31-40"); desimtys.add("41-50"); desimtys.addActionListener(this); add(desimtys); skaiciai = new List(10, true); skaiciai.addActionListener(this); add(ants); add(skaiciai); suma = new Button("Suma"); suma.addActionListener(this); add(suma); laukas = new TextField(); add(laukas); show(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } }); } public void actionPerformed(ActionEvent ivykis ) {if (ivykis.getSource()==desimtys) itraukti(desimtys.getSelectedIndex()); if (ivykis.getSource()==suma) sumuoti();} public void itraukti (int d){ skaiciai.removeAll(); int sk=d*10; for (int i=1; i<11;i++ ) {sk ++; skaiciai.add(""+sk);}} public void sumuoti(){ if (skaiciai.getSelectedItems().length ==0) {laukas.setText("Nieko nepasirinkote, todėl nėra ką sumuoti"); return;} int s=0, viso=skaiciai.getSelectedItems().length; for (int i=0; i<viso; i++ ) s=s+Integer.parseInt(skaiciai.getSelectedItems()[i]); laukas.setText("Pasirinkta skaičių " + viso+", jų suma lygi "+ s);} public static void main(String args[]) { new Sarasai();} }Atsisiųskite programos tekstą.
import java.awt.*; import java.awt.event.*; class DviDrobes extends Frame implements ActionListener{ Panel p1, p2; List spalvos; Button m1, m2; Drobe dr1, dr2; Color spalv []={Color.black, Color.red, Color.blue, Color.yellow, Color.gray, Color.orange, Color.pink}; public DviDrobes() { int w, h; setSize(400,440); setTitle("Dvi drobės viename lange"); setLayout(new BorderLayout()); w=getSize().width; h=getSize().height; p1= new Panel(); p1.setLayout(new GridLayout(3,1)); spalvos = new List (); spalvos.add("Juoda"); spalvos.add("Raudona"); spalvos.add("Mėlyna"); spalvos.add("Geltona"); spalvos.add("Pilka"); spalvos.add("Oranžinė"); spalvos.add("Rausva"); spalvos.addActionListener(this); p1.add(spalvos); m1= new Button("Piešti pirmoje drobėje"); m1.addActionListener(this); p1.add(m1); m2= new Button("Piešti antroje drobėje"); m2.addActionListener(this); p1.add(m2); add("West",p1); p2 = new Panel(); p2.setLayout(new GridLayout(2,1)); dr1 = new Drobe(); dr2 = new Drobe(); p2.add(dr1); p2.add(dr2); add("Center",p2); spalvos.select(0); show(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } });} public void actionPerformed(ActionEvent e) { if (e.getSource()==m1) {dr1.sp=spalv[spalvos.getSelectedIndex()];dr1.repaint(); } if (e.getSource()==m2) {dr2.sp=spalv[spalvos.getSelectedIndex()];dr2.repaint(); } } public static void main(String args[]) { new DviDrobes();} } class Drobe extends Canvas { Color sp=Color.white; public void paint (Graphics g) {g.drawRect(0,0,200,200); g.setColor(sp); g.fillRect(50,50, 100,100); }}Atsisiųskite programos tekstą.
Įvykis | MouseListener metodas |
Pelės mygtuko spragtelėjimas | public void mouseClicked(MouseEvent ivykis) |
Pelė komponentės teritorijoje | public void mouseEntered(MouseEvent ivykis) |
Pelė pabėgo iš komponentės teritorijos | public void mouseExited(MouseEvent ivykis) |
Paspaustas pelės mygtukas | public void mousePressed(MouseEvent ivykis) |
Pelės mygtukas atleistas | public void mouseReleased(MouseEvent ivykis) |
Įvykis | MouseMotionListener metodas |
Pelė juda | public void mouseMoved(MouseEvent ivykis) |
Pelė ,,velkama" | public void mouseDragged(MouseEvent ivykis) |
import java.awt.*; import java.awt.event.*; import java.applet.*; public class Taikinys extends Applet implements ActionListener, MouseListener { int xt, yt, x, y, nr, d, w, h, sekme; TextField txt = new TextField(); Button mygt; public void init() { setLayout (new BorderLayout()); mygt = new Button("Pradėti"); mygt.addActionListener(this); add("North", mygt); add("South",txt); w=getSize().width-20; h=getSize().height-20; addMouseListener(this); } public void actionPerformed (ActionEvent ivykis) {xt= (int)(Math.random()*w+10); yt= (int)(Math.random()*h+10); nr=0; sekme=0; repaint();} public void mouseClicked(MouseEvent peles_ivykis){ x=peles_ivykis.getX(); y=peles_ivykis.getY(); tikslas(x,y); } public void mousePressed(MouseEvent peles_ivykis){} public void mouseReleased(MouseEvent peles_ivykis){} public void mouseEntered(MouseEvent peles_ivykis){} public void mouseExited(MouseEvent peles_ivykis){} public void tikslas(int u, int v) {d= (int) (Math.sqrt((x-xt)*(x-xt)+(y-yt)*(y-yt) )); if (d<10) {nr++; txt.setText(""+nr+"-uoju bandymu pataikėte į tikslą"); sekme=1; repaint();} else {nr++; txt.setText("Atstumas iki tikslo lygus "+d);} } public void paint(Graphics g) { g.setColor(getBackground()); g.fillRect(0,0,w+20, h+20); if (sekme ==1){ g.setColor(Color.red); g.fillOval(xt, yt, 10, 10);} } }