Užduotis. Padarašykite Java vartotojo aplinką savo anksčiau atsiskaitytoms paskutinėms dviem Java užduotims.
Aprašymas.
Anksčiau jūsų parašyta
programa moka piešti arba atlikti kokius nors skaičiavimus, tačiau
vartotojas neturi galimybės interaktyviai keisti programos parametrų.
Vartotojo aplinka ir yra rašoma tuo tikslu, kad vartotojas turėtų
galimybę keisti kompiuterio ekrane programos parametrus ir tokiu
būdu valdyti gaunamą rezultatą.
Kuriant vartotojo aplinką pirma turėsite nuspręsti kokius parametrus
yra tikslinga pateikti interaktyviam keitimui.
Pavyzdžiui užduoties
"6 užduotis. Parašykite programą, kuri išrašytų tą patį žodį eilutėmis
apie apskritimą kaip parodyta piešinyje."
atveju tikslinga būtų sukurti vartotojo aplinką, kuri suteiktų galimybę keisti:
Aišku tai pareikalaus iš jūsų papildomų programavimo sąnaudų, tačiau tik vartotojo aplinka padaro jūsų programą prasminga, nes vieną ir tą patį rezultatą ar vaizdelį generuojanti programa tinka tik vienkartiniam naudojimui.
Detalų vartotojo aplinkos aprašymą rasite
Java per 21 d., 13 skyriuje
Pradėti projektuoti vartotojo aplinką geriau nuo stambių blokų,
t.y. jūs turite nuspręsti kaip norite išdėstyti ekrane valdymo elementus
(mygtukus, pagalbinį tekstą - žymes, informacijos įvedimo sritis ir t.t.)
ir funkcionalinę dalį (pvz. piešiamą objektą). Pradžiai rekomenduočiau
panaudoti paprastą ekrano išskaidymą į "centras", "kairė", "dešinė", "pietūs",
"šiaurė" (
ekrano išskaidymo pavyzdys).
Šį išskaidymą galite gauti panaudoję java.awt
BorderLayout klasę.
Pavyzdžiui:
//<applet code=servisas width=300 height=200> import java.applet.*; import java.awt.*; public class servisas extends Applet{ public void init() { setLayout(new BorderLayout()); add("North", new Button("Siaure")); add("East", new Button("Rytai")); add("South", new Button("Pietus")); add("West", new Button("Vakarai")); add("Center", new Button("Centras")); } }
Išsaugokite šį programos kodą faile vardu servisas.java,
sukompiliuotite su javac servisas.java ir paleiskite vykdyti:
appletviewer servisas.java. Atkreipkite dėmesį į pirmą servisas.java
eilutę:
//<applet code=servisas width=300 height=200>
Šią eilutę java kompiliatorius javac ignoruoja ir laiko komentarais,
o appletviewer dėka pirmosios eilutės parodo įskiepį ignoruodamas
ne applet žymei skirtą tekstą.
Jums nebūtina apibrėžti visus kraštus; standartiniu atveju centrą galite paskirti savo piešiniui, o apačią (pietus) - parametrų valdymo elementams. Kyla klausimas kaip centre patalpinti piešinį. Tai galima padaryti panaudojant Canvas klasę. Perdarykime savo programą taip, kad centre būtų nupiešiama elipsė.
//<applet code=servisas width=300 height=200> import java.applet.*; import java.awt.*; public class servisas extends Applet{ public void init() { setLayout(new BorderLayout()); add("South", new Button("Pietus")); add("Center", new elipse()); } } // Elipses piesimo klase class elipse extends Canvas{ public int i0=150, j0=100, a=80, b=50; public Color c=Color.green; public void paint(Graphics g){ g.setColor(c); g.fillOval(i0-a,j0-b,2*a,2*b); } }
Kol kas mūsų programoje vartotojas realiai nieko negali pakeisti, nes mygtukas "Pietus" neatlieka jokios naudingos funkcijos. Kaip tik čia mes ir planuojame išdėstyti programos parametrų keitimo elementus. Pateiksiu populiariausių valdymo elementų sąrašą:
Panaudoję Panel klasę galėsime sukurti pilną vartotojo aplinką:
//<applet code=servisas width=300 height=200> import java.applet.*; import java.awt.*; import java.awt.event.*; // Šį paketą naudos ActionListener interfeisas public class servisas extends Applet{ public void init() { setLayout(new BorderLayout()); elipse e; add("Center", e=new elipse()); add("South", new valdymas(e)); //valdymo klasei perduodame e elipses objektą, // kad iš valdymo klasės galėtume pakeisti // elipsės parametrus ir ją nupiešti } } // Elipses piesimo klase class elipse extends Canvas{ public int i0=150, j0=100, a=80, b=50; public Color c=Color.green; public void paint(Graphics g){ g.setColor(c); g.fillOval(i0-a,j0-b,2*a,2*b); } } // Parametru keitimo klase class valdymas extends Panel implements ActionListener{ //ActionListener reikalingas reaguoti į vartotojo veiksmus elipse e; // Čia saugosime nuorodą į elipse klasę TextField i0, j0, a, b; // Elipsės skaitinių parametrų teksitiniai laukai Choice spalva; // Čia išsirinksime spalvą String[] spalvos=new String[]{"Black","R","G","B"}; // Spalvų pavadinimai skirti vartotojui Color[] C=new Color[]{Color.black,Color.red,Color.green,Color.blue};// Spalvų Color[] masyvas Button piesk; // Su šiuo mygtuku aktyvuose elipsės perpiešimą public valdymas (elipse e){ // Klasės valdymas konstruktorius turi vieną parametrą, // kuris reikalingas iš valdymo pasiekti elipsės parametrus ir jos perpiešimą this.e = e; // Perimame nuorodą į elipsę setLayout(new GridLayout(2,5)); // Sukuriame masyvą skirtą valdymo elementams (2 eilutės, 5 stulpeliai) // Perpiešimui inicijuoti skirtas mygtukas piesk=new Button("Piesk"); piesk.addActionListener(this); // Pajungiame šį mygtuką, // kad jis reaguotų į vartotojo veiksmus add(piesk); // Čia ir toliau add patalpina aprašytą elementą valdymo elementų masyve // Pažymime tekstinę informaciją, kad vartotojui būtų aiški žemiau parašytų parametrų prasmė add(new Label("i0")); add(new Label("j0")); add(new Label("a")); add(new Label("b")); // Sukuriame spalvos išsirinkimo elementą spalva = new Choice(); // Užpildome jį galimomis išsirinkti spalvomis for (int i=0; i<spalvos.length; i++) spalva.addItem(spalvos[i]); spalva.select(2); // Pradžioje pasirenkame žalią, // nes tai pradinė klasėje elipse apibrėžta elipsės spalva add(spalva); // Sukuriame tekstinės informacijos, // skirtos apibrėžti elipsės skaitinius parametrus, laukus add(i0=new TextField(""+e.i0)); add(j0=new TextField(""+e.j0)); add(a=new TextField(""+e.a)); add(b=new TextField(""+e.b)); } // Paspaudus mygtuką "Piesk", bus kreipiamasi į šį metodą public void actionPerformed(ActionEvent E) { // Atnaujiname elipsės spalvą ir skaitinius parametrus e.c=C[spalva.getSelectedIndex()]; e.i0=Integer.parseInt(i0.getText()); e.j0=Integer.parseInt(j0.getText()); e.a=Integer.parseInt(a.getText()); e.b=Integer.parseInt(b.getText()); // Perpiešiame elipsę e.repaint(); } }
Pasižiūrėkime į savo darbo vaisių: Valdoma elipsė (programos kodas)
Pirmą kartą kuriant vartotojo interfeisą jums turėtų kilti nemažai klausimų. Todėl atliekant šią užduotį nesikuklinkite kreiptis į dėstytoją.