Apletai (angl. little application) arba lietuviškai - įskiepiai yra nedidelės
Java programos, kurios vykdomomos interneto naršyklės lange. Įskiepis - labai
tikslus, netgi pedantiškas vertimas. Todėl truputį šaltas. Galbut nepadarysime
didelės žalos gimtajai kalbai, jeigu kartais pavadinsime tas programėles apletais. Šis žodelis primena
kompiuterio pelės spragtelėjimą, po kurio atsidaro langas su programa.
Kad įskiepis pradėtų veikti, reikia parašyti programos tekstą, išsaugoti jį faile
su plėtiniu
Jeigu nėra klaidų, atvėrus naršyklės langą apletas pradės veikti.
Įskiepiams skirti pirmieji šeši mūsų pavyzdžiai.
Tačiau Java kalba galime rašyti ir įprastines, t.y. ne naršyklės lange vykdomas
programas. Trys paskutiniai pavyzdžiai skirti būtent joms.
-
1 pavyzdys. Tiesiog pasisveikinimas
- Šis apletas tik pasisveikina ir daugiau nieko.
import java.awt.*;
import java.applet.*;
public class Appl extends Applet
{
public void init() { }
public void paint(Graphics g)
{
g.drawString("Sveiki pakliuvę į Java salą!!", 50, 60 );
}
}
Pažiūrėkite, kaip veikia.
Atsisiųskite programos tekstą.
Į pradžią
-
2 pavyzdys. Vėliavos piešinys
- Objektas g, kurį naudojome pirmajame pavyzdyje gali ne tik užrašyti tekstą.
Paprašykime, kad jis nupieštų Lietuvos vėliavą.
import java.awt.*;
import java.applet.*;
public class Appl_1 extends Applet
{
public void init() {}
public void paint(Graphics g)
{
g.setColor(Color.yellow);
g.fillRect(50,10,200,40);
g.setColor(Color.green);
g.fillRect(50,50,200,40);
g.setColor(Color.red);
g.fillRect(50,90,200,40);
g.setColor(Color.black);
g.drawString("Sveiki matematikai,
pakliuvę į Java salą!!", 50, 180 );
}
}
Pažiūrėkite, kaip veikia.
Atsisiųskite programos tekstą.
Pabandykite pakeisti programos tekstą, kad g nupieštų kitokį piešinį
ir užrašytų kitokius tekstus. Išbandykite metodus g.drawOval(a,b,c,d),
g.fillOval(a,b,c,d).
Į pradžią
-
3 pavyzdys. Antraštė ir mygtukas
-
Įdėkime į savo apletą šį tą daugiau - antraštę ir mygtuką.
import java.awt.*;
import java.applet.*;
public class Appl_2 extends Applet {
Label antr, antr1;
Button mygt;
public void init() {
setLayout(new BorderLayout());
antr = new Label("Sveiki pakliuvę į Java salą!!", Label.CENTER);
antr1 = new Label("Salos gyventojų sveikinimas");
mygt = new Button("Paspauskite, nieko blogo neatsitiks!");
add("North",antr1);
add("Center",antr);
add("South",mygt);
}
}
Pažiūrėkite, kaip veikia.
Atsisiųskite programos tekstą.
Pabandykite įdėti daugiau antraščių ir mygtukų.
Pakeiskite objektą BorderLayout() objektu GridLayout(r,c), čia r ir c - natūralieji
skaičiai (eilučių ir stulpelių skaičiai apleto plane).
Į pradžią
-
4 pavyzdys. Veikiantis mygtukas
-
Trečiajame pavyzdyje įdėjome mygtuką, tačiau iš jo nebuvo daug naudos - apletui
buvo tas pats, ar spaudėme mygtuką, ar ne. Dabar priverskime programą
reaguoti į įvykį.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Appl_3 extends Applet implements ActionListener{
Label antr, antr1;
Button mygt;
public void init() {
setLayout(new BorderLayout());
antr = new Label("Sveiki pakliuvę į Java salą!!",Label.CENTER);
antr1 = new Label("Salos gyventojų sveikinimas");
mygt = new Button("Paspauskite, nieko blogo neatsitiks!");
mygt.addActionListener(this);
add("North",antr1);
add("Center",antr);
add("South",mygt);
}
public void actionPerformed(ActionEvent a_e)
{
if (a_e.getSource()==mygt) antr.setText("Tikėkimės,
kad čia jums patiks.");
}
}
Pažiūrėkite, kaip veikia.
Atsisiųskite programos tekstą.
Gerai išnagrinėkite programos tekstą. Tikriausiai, daugelis
jos eilučių - tamsus miškas. Paprašykite dėstytojo, kad paaiškintų, ką kurios eilutės
nurodo. Kai paaiškės - galėsite patys įdėti mygtukus ir nurodyti, ką reikia
daryti, kai jie nuspaudžiami.
Į pradžią
-
5 pavyzdys. Duomenų įvedimo laukas
- Yra ne vienas būdas perduoti duomenis įskiepiui. Šiame pavyzdyje
duomenys (tekstas) tiesiog įrašomas į įvedimo lauką, kad programa jį juos nuskaitytų.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Appl_4 extends Applet implements ActionListener{
Label antr1, antr;
Button mygt;
TextField txt;
public void init() {
setLayout(new GridLayout(4,1));
antr1 = new Label("Duomenų įvedimo laukas",Label.CENTER);
txt = new TextField();
add(txt);
antr = new Label(" ");
mygt = new Button("Įvedę tekstą, paspauskite!");
mygt.addActionListener(this);
add("North",antr1);
add("Center",antr);
add("South",mygt);
}
public void actionPerformed(ActionEvent a_e)
{
if (a_e.getSource()==mygt)
antr.setText(txt.getText());
txt.setText("");
}
}
Pažiūrėkite, kaip veikia.
Atsisiųskite programos tekstą.
Į pradžią
-
6 pavyzdys. Pirmoji Java programa
- Jeigu jūs norite rašyti ne apletą, o "tikrą" Java programa,
kurios vykdymui nereikalinga interneto naršyklė, reikės šiek
tiek pakeisti apleto programos tekstą.
Paskalio žinovų turbūt nenustebins toks tekstas.
public class Prog_1 {
public static void main ( String arg[] ) {
System.out.println ("Mano pirmoji Java programa!");
}
}
Ką turėtų nuveikti tokia programa - aišku.
Belieka priversti dirbti. Pirmiausia, kaip ir įskiepį, kompiliuojame ir gauname failą
Prog_1.class. Tada belieka tame pačiame aplanke įvykdyti komandą
java Prog_1
Atsisiųskite programos tekstą.
Į pradžią
-
7 pavyzdys. Programėlė: kvadratinės šaknis
-
Dažniausiai duomenys yra skaičiai. Kaip priversti programą tekstinius
duomenis, įvestus iš klaviatūros ar įskiepio įvedimo lauko, suprasti kaip skaičius ir atlikti
su jais reikalingus veiksmus? Java komandos,
priverčiančios tai daryti iš pradžių tikriausiai pasirodys gana keistos.
Sukurkime nedidelę programėlę, kuri ką nors apskaičiuotų. Pavyzdžiui,
ištrauktų kvadratinę šaknį iš įvesto skaičiaus. Programos tekstas, gali būti, pavyzdžiui, toks:
import java.io.*;
public class Kvadr_sakn{
public static void main ( String arg[] ) throws IOException {
String a_iv;
double a;
BufferedReader br = new BufferedReader (
new InputStreamReader (System.in));
System.out.println ("Galiu istraukti kvadratine sakni");
System.out.print ("Iveskite skaiciu: ");
a_iv = br.readLine();
a = Double.parseDouble(a_iv);
System.out.println ("Kvadratine saknis is skaiciaus "+ a +" lygi");
System.out.println (" "+Math.sqrt(a));
System.in.read();
}
}
Kai kurios teksto eilutės tikriausiai atrodo gana mįslingai. Jų prasmė
paaiškės gerokai vėliau - kai įgysime daugiau patirties. O dabar pakaks
žinoti, kam jos skirtos: pirmiausia sukuriame įvedimo iš klaviatūros
objektą; įvestą informaciją priskiriame String tipo kintamajam; nurodome,
kad ši informacija turi būti paversta dvigubo tikslumo (double) skaičiumi;
liepiame atlikti skaičiavimus ir išvesti rezultatus į ekraną.
Atsisiųskite programos tekstą, sukompiliuokite ir įvykdykite.
Į pradžią
-
8 pavyzdys. Įskiepis: kvadratinė šaknis
-
Dabar tą pačią kvadratinės šaknies traukimo programą perrašykime taip, kad
ją galėtume vykdyti naršyklės lange. Darbų teks nuveikti dar daugiau:
sukurti įskiepio elementus (mygtukus, antraštes, įvedimo lauką), juos
išdėstyti, be to - priversti programą reaguoti į mūsų mūsų veiksmus...
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Appl_5 extends Applet implements ActionListener{
Label antr1,antr2, antr;
Button mygt;
TextField txt;
public void init() {
setLayout(new GridLayout(5,1));
antr1 = new Label("Kvadratinės šaknies traukimo programa",Label.CENTER);
add(antr1);
antr2 = new Label("Duomenų įvedimo laukas");
add(antr2);
txt = new TextField();
add(txt);
antr = new Label("Čia bus rašomi atsakymai ");
add(antr);
mygt = new Button("Įvedę skaičių, paspauskite!");
mygt.addActionListener(this);
add(mygt);
}
public void actionPerformed(ActionEvent a_e)
{
if (a_e.getSource()==mygt)
sakn();
}
void sakn()
{
double r,q;
r=Double.valueOf(txt.getText()).doubleValue();
q=Math.sqrt(r);
antr.setText("Kvadratinė šaknis iš skaičiaus "+String.valueOf(r)+"
lygi "+String.valueOf(q) );
}
}
Pažiūrėkite, kaip veikia.
Atsisiųskite programos tekstą.
Į pradžią
-
9 pavyzdys. Kvadratinės lygties šaknys
- Pabandykite pabendrauti su Java. Ši programėlė išspręs jūsų pateiktą kvadratinę lygtį.
import java.io.*;
public class Prog_2 {
public static void main ( String arg[] ) throws IOException {
String aString, bString, cString;
double a,b,c;
BufferedReader br = new BufferedReader ( // kol kas priimkite tai
new InputStreamReader (System.in)); // kaip būtinybę
System.out.println ("Galiu isspresti kvadratine lygti: ax^2 + bx +c = 0");
System.out.print ("Parasykite koeficienta a: ");
aString = br.readLine();
a = Double.parseDouble(aString);
System.out.print ("Parasykite koeficienta b: ");
bString = br.readLine();
b = Double.parseDouble(bString);
System.out.print ("Parasykite koeficienta c: ");
cString = br.readLine();
c = Double.parseDouble(cString);
System.out.println ("Kvadratines lygties: "+a+"x^2 + "+b+"x +"+c+" = 0");
System.out.println ("sprendiniai yra:");
System.out.println ("x1="+((-b+Math.sqrt(b*b-4*a*c))/(2*a)));
System.out.println ("x2="+((-b-Math.sqrt(b*b-4*a*c))/(2*a)));
}
}
Atsisiųskite programos tekstą.
Į pradžią
-
10 pavyzdys. Prisistatymas
- Pabandykite pabendrauti su Java lietuviškai.
Atkreipkite dėmesį į pasikeitusias skaitymo ir rašymo komandas.
import java.io.*;
public class Prog_3{
public static void main(String[] args) throws IOException {
String sp,sv;
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in, "Cp775"));//jei displėjaus kodų lentelė Cp775
PrintWriter pw = new PrintWriter(
new OutputStreamWriter(System.out, "Cp775"),true);
pw.print("Parašykite savo vardą: ");
pw.flush();
sv=br.readLine();
pw.print("Parašykite savo pavardę: ");
pw.flush();
sp=br.readLine();
pw.println(" Jūs esate "+sv+" "+sp);
}
}
Atsisiųskite programos tekstą.
Kaip viską įsivaizduoti?
Gali būti, kad peržvelgus daugybę nelabai suprantamų Java kodo eilučių
apėmė nerimas: kaip čia viskas jungiasi tarpusavyje, ką reiškia ir kaip viskas vyksta?
Pabandykime susikurti, kad ir nelabai tikslų, užtat ryškų vaizdinį, kuris gali išgelbėti
nuo melancholijos priepuolių.
Visų pirma suvokime programavimą kaip tam tikrų daiktų (objektų) gamybą. Taigi pagrindinis kiekvieno
programuojančio žmogaus tikslas - sukurti kokį nors veikiantį daiktą (žinoma, gali būti ir šalutinių tikslų - pavyzdžiui, gauti įskaitą).
Bet kokio daikto gamyba (automobilių, maisto produktų ir t.t.) prasideda nuo projekto.
Kodas, kurį rašome Java kalba, tai ir yra mūsų projektas. Jame aprašome, koks turi būti mūsų daiktas.
Java kalboje šio būsimo daikto projektą vadiname klase. Naudodamiesi tuo pačiu projektu galime sukurti daug vienodų
(ar panašių) daiktų, t.y. objektų. Projekte (klasės kode) nurodome, kokios turi būti mūsų objekto savybės (kokie turi būti
objektą aprašantys duomenys) ir ką mūsų objektas turi veikti (kokios šio objekto funkcijos t.y. metodai).
Gali būti, kad mūsų tikslas yra sukurti ne vieną vientisą objektą, bet sudėtingą tarpusavyje susijusių objektų
sistemą (šitaip galime įsivaizduoti, pavyzdžiui, automobilį arba kompiuterį). Tada programą sudarys iš kelių fragmentų sudarytas failas,
o gal ir keletas failų. Tarkime, visas klaidas ištaisėme ir ,,išvertėme" programą į vidinę kompiuterio kalbą, t.y. programą
sukompiliavome. Kaip gi prasideda jos vykdymas, t.y. ,,realių" objektų gaminimas?
Java programos vykdymas prasideda nuo main metodo, o įskiepio - nuo init .
Kad objektas galėtų ką nors veikti, jis turi būti sukonstruotas . Kol kas mes nesirūpinome, kaip
turi būti konstruojami mūsų objektai, manydami, kad kompiuteris pats žino, kaip tai daryti. Taip ir yra - jeigu
kode nėra nurodymų, kaip konstruoti objektą, kompiuteris tai atlieka savo nuožiūra (naudoja numatytąjį arba standartinį
konstruktorių), kaip šiame labai paprastame pavyzdyje:
import java.io.*;
public class Java_programa_4 {
public static void main(String[] args)throws IOException {
int d=2;
double a;
BufferedReader br = new BufferedReader (
new InputStreamReader (System.in));
System.out.print ("Iveskite skaiciu: ");
a = Double.parseDouble(br.readLine());
System.out.print ("Ivestas skaičius "+a+"\n padauginę jį iš d gausime "+d*a);
System.in.read();
}
}
Mūsų klasėje tėra tik metodas main, jis ir padaro visą darbą. Tiek to ir darbo - padvigubinti skaičių.
Taigi sukūrėme objektą - ,,įvesto skaičiaus dvigubintoją", daugiklis d yra vidinis mūsų objekto parametras.
O dabar modifikuokime savo programą taip, kad turėtume galimybę duoti nurodymus mūsų objekto konstruktoriui.
Jeigu norime nurodinėti, tai konstruktorių turime patys aprašyti. Klasės konstruktorius yra specialus metodas, kurio
vardas turi sutapti su klasės vardu. Taigi būtini tokie vardų sutapimai:
- failo, kuriame įrašytas klasės su pagrindiniu metodu main kodas, pavadinimas turi sutapti su klasės vardu;
- konstruktoriaus vardas turi sutapti su klasės, kurią jis konstruoja vardu.
Panagrinėkime modifikuotą programos kodą; skaičiais nurodyta jos eilučių vykdymo tvarka.
import java.io.*;
public class Java_programa_4 {
int d;
BufferedReader br = new BufferedReader (
new InputStreamReader (System.in));
Java_programa_4 (int iv)
{
d=iv; //2
daug(); //3
}
public static void main(String[] args) {
new Java_programa_4(Integer.parseInt(args[0])); //1
}
public void daug( ) //4
{ double a;
try{
System.out.print ("Iveskite skaiciu: ");
a = Double.parseDouble(br.readLine());
System.out.print ("Ivestas skaičius "+a+"\n padauginę jį iš d="+d+" gausime "+d*a);
System.in.read(); }
catch (IOException e) {}
}
}
- Programos vykdymas prasideda nuo pagrindinio metodo. Panagrinėkime 1 eilutę:
- konstruktorius kintamajam d (vidiniam objekto parametrui) suteikia nurodytą reikšmę;
- ,,įjungiamas" metodas daug(); jis nuveiks visą darbą;
- metodas daug() pradeda veikti...
Štai ir viskas. Jeigu suvoksite šią paprastą Java programų logiką, mokėsite ,,narstyti" ir sudėtingus kodus.
Užduotis
Įsižiūrėję į kvadratinės šaknies traukimo programėlę ir įskiepį
sukurkite programą ir įskiepį, atliekantį vieną iš sąraše išvardytų darbų:
- įvesto skaičiaus sinuso skaičiavimas;
- įvesto skaičiaus natūrinio logaritmo skaičiavimas;
- apskritimo ilgio skaičiavimas, įvedus spindulio ilgį;
- dviejų įvestų skaičių sumos (arba skirtumo, sandaugos ar dalmens)
skaičiavimas;
- dviejų įvestų skaičių maksimumo (minimumo) radimas;
- dviejų atsitiktinių intervalo [0;1] skaičių generavimas;
- atsitiktinio skaičiaus iš intervalo [0;n] generavimas, kai n reikšmė yra įvedama;
- įvesto skaičiaus arkkosinuso skaičiavimas;
- rutulio tūrio skaičiavimas įvedus rutulio spindulio ilgį;
- apskaičiuokite įvesto skaičiaus arkkosinusą.
-
Į pradžią