You are on page 1of 43

Hyrja (input), dalja (output) dhe gjendja

Hyrja (input), dalja (output) dhe gjendja fq. 1

Hyrja (input), dalja (output) dhe


gjendja

Objektivat:
T zbatohet hyrje interaktive, ku nj aplikacion mund t
ket interaksion me shfrytzuesin dhe t krkoj input
kur sht e nevojshme pr kompjutim.
T shfrytzohet inheritimi pr t disenjuar dritare
grafike q afishojn output n forma teksti, ngjyrash
dhe figurash.
T tregohet si nj objekt mund t mbaj mend
gjendjen e kompjutimit me an t variablave t
fushave.

Hyrja (input), dalja (output) dhe gjendja fq. 2

Hyrja (input) interaktive

Controller

main

Input View

Output View

Figura 1. Nj arkitektur me input-view

Hyrja (input), dalja (output) dhe gjendja fq. 3

Hyrja (input) interaktive Vazhdim


Input view: komponentet e nj aplikacioni t cilat pranojn
t dhna hyrse.
Output view: komponentet e nj aplikacioni t cilat
afishojn t dhna dalse.
Hyrje interaktive: t dhnat hyrse t cilat shfrytzuesi i jep
gjat ekzekutimit t programit.
Dialog: dritare e cila afishon nj mesazh t shkurtr
dhe/ose pranon hyrje interaktive, p.sh., duke rradhitur
shfrytzuesi tekst ose duke shtypur nj buton. Kur
shfrytzuesi t ket prfunduar interaksionin me t,
dialogu zhduket.
Hyrja (input), dalja (output) dhe gjendja fq. 4

Hyrja (input) interaktive Vazhdim

Hapat kryesor pr t shfrytzuar klasn JOptionPane


pr gjenerim t dialogut pr lexim hyrjeje:
1. Krko n pakon javax.swing klasn JOptionPane:
import javax.swing.*;
2. Krijo dialogun n displej:
String input
= JOptionPane.showInputDialog(POROSIA);

ku POROSIA sht nj string i cili do t afishohet


prbrenda dialogut.

Hyrja (input), dalja (output) dhe gjendja fq. 5

Hyrja (input) interaktive Vazhdim

import java.text.*;
import javax.swing.*;
/** FahrenheitToCelsius konverton vlern e temperaturs
* input: gradt Fahrenheit, int
* output: gradt Celsius, double
*/
public class FahrenheitToCelsius
{ public static void main(String[] args)
{ String input = JOptionPane.showInputDialog("Grad Fahrenheit:");
int f = new Integer(input).intValue();
double c = (5.0/9.0) * (f - 32);
DecimalFormat formatter = new DecimalFormat("0.0");
System.out.println("Pr grad Fahrenheit " + f + ",");
System.out.println("grad Celsius " + formatter.format(c));
}
}

Hyrja (input), dalja (output) dhe gjendja fq. 6

Hyrja (input) interaktive Vazhdim

FahrenheitToCelsius
JOptionPane

main

System.out
println

showInputDialog

Integer
intValue

DecimalFormat
format

Figura 2. Arkitektura e aplikacionit pr konvertimin e temperaturs

Hyrja (input), dalja (output) dhe gjendja fq. 7

Dialogu dals

Krijimi i nj dialogu t mesazhit n displej:


JOptionPane.showMessageDialog(null, MESAZHI);
ku MESAZHI sht stringu i cili do t afishohet n dialogun.
null: vler e posame n Java e cila shnon nuk ka
vler. Prdorimi i null si operand n shprehje aritmetike
ose drgimi ksaj i nj mesazhi gjeneron nj prjashtim
(run-time error).

Hyrja (input), dalja (output) dhe gjendja fq. 8

Dialogu dals Vazhdim

import java.text.*;
import javax.swing.*;
/** FahrenheitToCelsius konverton vlern e temperaturs
* input: gradt Fahrenheit, int
* output: gradt Celsius, double
*/
public class FahrenheitToCelsius
{ public static void main(String[] args)
{ String input = JOptionPane.showInputDialog("Grad Fahrenheit:");
int f = new Integer(input).intValue();
double c = (5.0/9.0) * (f - 32);
DecimalFormat formatter = new DecimalFormat("0.0");
JOptionPane.showMessageDialog(null, f + " Fahrenheit jan "
+ formatter.format(c) + " Celsius");
}
}

Hyrja (input), dalja (output) dhe gjendja fq. 9

Dalja (output) grafike

Output view pr dalje grafike jan dritaret grafike, t cilat


afishojn tekst, figura, ngjyra, etj.
Dritaret grafike jan objekte.
Klasat e dritareve grafike shkruhen duke zgjeruar me
inheritim (trashigimi) klas nga bibliotekat e Java (nga t
cilat mund t konstruktohen dritare boshe).

Hyrja (input), dalja (output) dhe gjendja fq. 10

Panelat dhe kornizat e tyre

Frame (korniza): emrtimi n Java pr dritare grafike.


Kornizat ndrtohen nga class JFrame, e cila ndodhet n
pakon javax.swing.
import javax.swing.*;
/** FrameTest krijon nj korniz */
public class FrameTest
{ public static void main(String[] args)
{ JFrame sampleFrame = new JFrame();
System.out.println("Ku sht korniza?");
}
}

Hyrja (input), dalja (output) dhe gjendja fq. 11

Panelat dhe kornizat e tyre Vazhdim

import javax.swing.*;
/** FrameTest krijon dhe afishon nj korniz */
public class FrameTest
{ public static void main(String[] args)
{ JFrame sampleFrame = new JFrame();
sampleFrame.setSize(300, 200);
sampleFrame.setVisible(true);
System.out.println("Korniza u shfaq!");
}
}

Hyrja (input), dalja (output) dhe gjendja fq. 12

Prshtatja e panelave me trashigimi

Panel: objekti n Java mbi t cilin vizatohet. Pr t vizatuar


mbi panel shfrytzohet teknika e quajtur trashigimi
(inheritance).
1. Duke u nisur nga class JPanel, shkruhet klasa e
veant, p.sh., class TestPanel. Prbrenda ksaj
klase prfshihen instruksionet pr vizatim.
2. Konstruktohet nj objekt nga class TestPanel,
konstruktohet nj korniz nga class JFrame, dhe
futet objekti panel n objektin korniz.
3. Vhet madhsia dhe dukshmria e kornizs.

Hyrja (input), dalja (output) dhe gjendja fq. 13

Prshtatja e panelave me trashigimi


Vazhdim
import java.awt.*;
import javax.swing.*;
public class TestPanel extends JPanel
{ public void paintComponent(Graphics g)
{ // ... instruksionet t cilat vizatojn mbi panelin
}
}

Nga public class TestPanel mund t konstruktohen objekte panela.


Fraza extends JPanel bn q class TestPanel ta zgjeroj/trashigoj
class JPanel. TestPanel quhet nnklas, JPanel quhet mbiklas.
Instruksionet shtes prbrenda class TestPanel prmbahen n metodn e re
paintComponent. Metoda paintComponent startohet dhe ristartohet
automatikisht.
Penda grafike g sht objekti i cili vizaton mbi panelin. Penda grafike shfrytzon
klasa nga biblioteka java.awt.
Hyrja (input), dalja (output) dhe gjendja fq. 14

Prshtatja e panelave me trashigimi


Vazhdim
import java.awt.*;
import javax.swing.*;
/** TestPanel krijon nj panel q afishon nj string */
public class TestPanel extends JPanel
{ /** paintComponent vizaton panelin
* @param g - penda grafike */
public void paintComponent(Graphics g)
{ g.setColor(Color.red);
g.drawString("Tungjatjeta!", 30, 80);
}
}

Hyrja (input), dalja (output) dhe gjendja fq. 15

Prshtatja e panelave me trashigimi


Vazhdim
import javax.swing.*;
/** FrameTest krijon dhe afishon nj korniz,
* dhe fut nj panel n t. */
public class FrameTest3
{ public static void main(String[] args)
{ TestPanel samplePanel = new TestPanel();
JFrame sampleFrame = new JFrame();
sampleFrame.getContentPane().add(samplePanel);
sampleFrame.setSize(300, 200);
sampleFrame.setVisible(true);
System.out.println("Korniza u shfaq e shkruar!");
}
}

Hyrja (input), dalja (output) dhe gjendja fq. 16

Prshtatja e panelave me trashigimi


Vazhdim
Trashigimia (inheritance): teknik pr lidhjen e dy klasave
ashtu q njra sht prshtatje ose zgjerim i tjetrs. N
qoft se klasa C2 trashigon (zgjeron) klasn C1
class C2 extends C1
ather do objekt i konstruktuar nga class C2 do t ket
tr strukturn e definuar prbrenda class C1 si dhe
strukturn prbrenda class C2.
Nnklasa dhe mbiklasa: C2 sht nnklas e C1, kurse C1
sht mbiklas e C2.

Hyrja (input), dalja (output) dhe gjendja fq. 17

Prshtatja e panelave me trashigimi


Vazhdim

FrameTest
main(...)
{ samplePanel ==
sampleFrame ==
...

a1 : TestPanel
a1
a3

paintComponent(g == a2 )
{ ... }
Instruksionet nga klasa JPanel

}
a2 : Graphics
setColor(...) { ... }
drawString(...) { ... }
...

a3 : JFrame
setSize(...) { ... }
setVisible(...) { ... }
...

[Objekti Graphics konstruktohet


automatikisht me TestPanel.]

Hyrja (input), dalja (output) dhe gjendja fq. 18

Prshtatja e panelave me trashigimi


Vazhdim

FrameTest
main

TestPanel
paintComponent

JFrame
getContentPane
setSize

Graphics
JPanel
setColor
drawString

setVisible

Figura 3. Arkitektura e aplikacionit me TestPanel

Hyrja (input), dalja (output) dhe gjendja fq. 19

Prshtatja e panelave me trashigimi


Vazhdim
import java.awt.*;
import javax.swing.*;
/** MyPanel krijon nj panel me ngjyra */
public class MyPanel extends JPanel
{ /** paintComponent vizaton mbi panelin
* @param g -- penda grafike */
public void paintComponent(Graphics g)
{ g.setColor(Color.red);
int left = 100;
int top = 70;
int width = 90;
int height = 60;
g.drawRect(left, top, width, height);
int diameter = 40;
g.fillOval(left + width - diameter, top, diameter, diameter);
}
}
Hyrja (input), dalja (output) dhe gjendja fq. 20

Prshtatja e panelave me trashigimi


Vazhdim
import java.awt.*;
import javax.swing.*;
/** FrameTest2 afishon nj dritare me ngjyra */
public class FrameTest2
{ public static void main(String[] args)
{ JFrame myFrame = new JFrame();
myFrame.getContentPane().add(new MyPanel());
myFrame.setTitle("Vizatuesi im i kornizave");
myFrame.setBackground(Color.white);
int width = 300;
int height = 200;
myFrame.setSize(width, height);
myFrame.setVisible(true);
}
}

Hyrja (input), dalja (output) dhe gjendja fq. 21

Prshtatja e panelave me trashigimi


Vazhdim
Ngjyrosje e dritares: vizatimi i tekstit, ngjyrave dhe figurave
n dritaren grafike; kryhet prmes metods
paintComponent.
Pend grafike: objekti i shfrytzuar nga metoda
paintComponent pr ngjyrosjen e dritares.
Piksel: njra nga pikat e imazhit; shfrytzohet si njsi
matse pr distanca prbrenda dirtares grafike.

Hyrja (input), dalja (output) dhe gjendja fq. 22

Formati dhe metodat pr vizatim

70

200

100

300

Figura 4. Alokimi i pikselit me koordinata (100,70)


Hyrja (input), dalja (output) dhe gjendja fq. 23

Formati dhe metodat pr vizatim


Vazhdim

70
100
60
90

Figura 5. g.drawRect(100, 70, 90, 60)


Hyrja (input), dalja (output) dhe gjendja fq. 24

Formati dhe metodat pr vizatim


Vazhdim

70
100

40
40

Figura 6. g.drawOval(100, 70, 40, 40)


Hyrja (input), dalja (output) dhe gjendja fq. 25

Formati dhe metodat pr vizatim


Vazhdim

Metoda

Semantika

setColor(c)

Mbush pendn me ngjyrn

drawLine(x1, y1, x2, y2)

Vizaton segmentin

drawString(s, x, y)

Afishon stringun t pozicionuar


sipas koordinatave

drawRect(x, y, width, height)

Vizaton drejtkndshin

fillRect(x, y, width, height)

Mbush drejtkndshin

drawOval(x, y, width, height)

Vizaton elipsn

fillOval(x, y, width, height)

Mbush elipsn

fillArc(x, y, width, height,


startAngle, thickness)

Vizaton pjesn e harkut t elipss

Tabela 1. Disa metoda t pends grafike (class Graphics)


Hyrja (input), dalja (output) dhe gjendja fq. 26

Konstruktor metodat dhe objekti


this
Metod konstruktor: metod prbrenda nj klase q
ekzekutohet kur t konstruktohet nj objekt nga klasa.
Emri i konstruktorit sht i njjt sikurse emri i klass n t
ciln paraqitet.
this: vler e posame n Java e cila shnon kt
objekt. Zbatohet pr vetreferencim t objekteve.

Hyrja (input), dalja (output) dhe gjendja fq. 27

Konstruktor metodat dhe objekti


this Vazhdim
import java.awt.*;
import javax.swing.*;
import java.util.*;
/** ClockWriter vizaton nj or */
public class ClockWriter extends JPanel
{ public ClockWriter()
{ int width = 200;
JFrame clockFrame = new JFrame();
clockFrame.getContentPane().add(this);
clockFrame.setTitle("Ora");
clockFrame.setBackground(Color.white);
clockFrame.setSize(width, width);
clockFrame.setVisible(true);
}

Hyrja (input), dalja (output) dhe gjendja fq. 28

Konstruktor metodat dhe objekti


this Vazhdim
/** paintComponent vizaton orn
* @param g - penda grafike */
public void paintComponent(Graphics g)
{ GregorianCalendar time = new GregorianCalendar();
int minutesAngle = 90 - time.get(Calendar.MINUTE) * 6;
int hoursAngle = 90 - time.get(Calendar.HOUR) * 30;
int left = 50;
int top = 50;
int diameter = 100;
g.setColor(Color.black);
g.drawOval(left, top, diameter, diameter);
g.setColor(Color.red);
g.fillArc(left + 5, top + 5, diameter - 10, diameter - 10,
minutesAngle, 5);
g.setColor(Color.blue);
g.fillArc(left + 25, top + 25, diameter - 50, diameter - 50,
hoursAngle, -8);
}
Hyrja (input), dalja (output) dhe gjendja fq. 29

Konstruktor metodat dhe objekti


this Vazhdim
/** main: pr testim */
public static void main(String[] args)
{ new ClockWriter(); }
}

Hyrja (input), dalja (output) dhe gjendja fq. 30

Konstruktor metodat dhe objekti


this Vazhdim
Fraza
new ClockWriter()

ka semantikn vijuese:
Konstruktohet nj ClockWriter objekt n memorien
qendrore;
Objektit t ri i drgohet mesazh pr t ekzekutuar
instruksionet n konstruktorin e tij, t quajtur poashtu
ClockWriter.

Hyrja (input), dalja (output) dhe gjendja fq. 31

Objektet me gjendje: Variablat e


fushave
Variabl e fushs (fush): variabl e deklaruar n klas
pavarsisht nga metodat e klass. Fusha mund t
referencohet dhe ti ndahet vler nga t gjitha metodat n
at klas.
Variabl lokale: variabl e deklaruar prbrenda nj
metode. Mund t referencohet vetm nga urdhrat
prbrenda asaj metode.

Hyrja (input), dalja (output) dhe gjendja fq. 32

Objektet me gjendje: Variablat e


fushave Vazhdim
import java.awt.*;
import javax.swing.*;
/** FieldExample: Afishon numrin e ngjyrosjeve t dritares */
public class FieldExample extends JPanel
{ private int count; // numri i ngjyrosjeve t dritares
/** FieldExample: konstrukton dritaren */
public FieldExample()
{ count = 0; // dritarja akoma nuk sht ngjyrosur
JFrame myFrame = new JFrame();
myFrame.getContentPane().add(this);
myFrame.setTitle("Shembull fushe");
int height = 200;
myFrame.setSize(3 * height / 2, height);
myFrame.setVisible(true);
}

Hyrja (input), dalja (output) dhe gjendja fq. 33

Objektet me gjendje: Variablat e


fushave Vazhdim
/** paintComponent vizaton numrin e ngjyrosjeve
* @param g - penda grafike */
public void paintComponent(Graphics g)
{ count = count + 1; // ose count++
g.setColor(Color.black);
int margin = 25;
int lineHeight = 20;
int firstLine = 40;
int baseline = firstLine + lineHeight * count;
g.drawString("E ngjyrosur " + count + " her", margin, baseline);
}
/** main: pr testim */
public static void main(String[] args)
{ new FieldExample(); }
}

Hyrja (input), dalja (output) dhe gjendja fq. 34

Objektet me gjendje: Variablat e


fushave Vazhdim

a2 : Graphics
setColor(...) { ... }
drawString(...) { ... }
...

FieldExample
main(...)
{ ... > }
a1 : FieldExample
private int count ==

paintComponent( g ==
{ count = count + 1;
...
}

a2

a3 : JFrame
setSize(...) { ... }
setVisible(...) { ... }
...

Hyrja (input), dalja (output) dhe gjendja fq. 35

Objektet me gjendje: Variablat e


fushave Vazhdim
Fushat gjithashtu mund t prmbajn edhe objekte
(adresa t tyre).
// ... import -- njsoj sikurse m par
public class ClockWriter extends JPanel
{ private GregorianCalendar time = new GregorianCalendar();
public ClockWriter()
{ // ... Njsoj sikurse m par
}
public void paintComponent(Graphics g)
{ int minutesAngle = 90 - time.get(Calendar.MINUTE) * 6;
int hoursAngle = 90 - time.get(Calendar.HOUR) * 30;
// ... Njsoj sikurse m par
}
// ... main -- njsoj sikurse m par
}

Hyrja (input), dalja (output) dhe gjendja fq. 36

Objektet me gjendje: Variablat e


fushave Vazhdim

ClockWriter

JPanel

paintComponent

Graphics
GregorianCalendar

setColor

get

drawString

Figura 7. Arkitektura e ClockWriter

Hyrja (input), dalja (output) dhe gjendja fq. 37

Objektet me gjendje: Variablat e


fushave Vazhdim
Relacioni sht: n qoft se klasa C2 zgjron klasn C1,
themi se C2 sht C1.
Relacioni shfrytzon: n qoft se klasa C2 drgon
mesazhe objekteve t konstruktuara nga klasa C1, themi
se C2 shfrytzon C1.
Relacioni ka: n qoft se klasa C2 posedon fush vlera e
s cils sht objekt i klass C1 t cilin ajo e ka
konstruktuar, themi se C2 ka C1.

Hyrja (input), dalja (output) dhe gjendja fq. 38

Objektet me gjendje: Variablat e


fushave Vazhdim
Semantika e fushave:
Qeliza e fushs krijohet kur edhe vet objekti.
Fusha mund t inicializohet me vet krijimin, n
instruksionin e deklarimit. N qoft se fusha nuk
inicializohet gjat deklarimit, ather preferohet q t
inicializohet prbrenda metods konstruktor.
Vlera n qelizn e nj fusheje mbahet edhe kur nuk
ekzekutohet asnj metod e objektit.
Emrat e fushave nuk duhet t rideklarohen prbrenda
ndonj metode.

Hyrja (input), dalja (output) dhe gjendja fq. 39

Zbatimi i fushave pr memorimin e


hyrjes dhe prgjegjjeve

import java.awt.*;
import javax.swing.*;
import java.text.*;
/** Konverton vlern e temperaturs. */
public class FahrenheitToCelsiusWriter extends JPanel
{ private int fahrenheit;
private double celsius;
private int leftMargin = 20;
private int lineHeight = 20;

Hyrja (input), dalja (output) dhe gjendja fq. 40

Zbatimi i fushave pr memorimin e


hyrjes dhe prgjegjjeve Vazhdim

/** Konstruktori. */
public FahrenheitToCelsiusWriter()
{ String input = JOptionPane.showInputDialog("Grad Fahrenheit:");
fahrenheit = new Integer(input).intValue();
celsius = (5.0/9.0) * (fahrenheit - 32);
int frameHeight = 200;
JFrame f = new JFrame();
f.getContentPane().add(this);
f.setTitle("Celsius n Fahrenheit");
f.setBackground(Color.white);
f.setSize(3 * frameHeight / 2, frameHeight);
f.setVisible(true);
}

Hyrja (input), dalja (output) dhe gjendja fq. 41

Zbatimi i fushave pr memorimin e


hyrjes dhe prgjegjjeve Vazhdim

/** Vizaton porosin.


* @param g penda grafike */
public void paintComponent(Graphics g)
{ g.setColor(Color.red);
int firstLine = lineHeight * 4;
g.drawString(fahrenheit + " Fahrenheit jan",
leftMargin, firstLine);
DecimalFormat formatter = new DecimalFormat("0.0");
g.drawString(formatter.format(celsius) + " Celsius",
leftMargin, firstLine + lineHeight);
}
/** main: pr testim */
public static void main(String[] args)
{ new FahrenheitToCelsiusWriter(); }
}

Hyrja (input), dalja (output) dhe gjendja fq. 42

Testimi i programit i cili shfrytzon


hyrje
Varsisht nga lloji i test shembujve, stili i testimit mund t
jet:
1. Testim i kutis s bardh.
2. Testim i kutis s zez.

Hyrja (input), dalja (output) dhe gjendja fq. 43

You might also like