In aceasta lucrare de laborator vor fi
acoperite urmatoarele probleme:
·
crearea interfetelor
grafice Java folosind Java Swing
·
tratarea evenimentelor
(interactivitatea) in interfetele grafice Swing
·
crearea si instalarea applet-urilor (miniaplicatiilor) Java
Programul ElementeAplicatieSwing ilustreaza elementele unei aplicatii grafice Swing (script pentru compilarea si executia lui):
|
import javax.swing.*; // Numele actual al pachetului Swing import java.awt.*; // Numele pachetului AWT (necesar uneori) import java.awt.event.*; // Numele pachetului pentru tratarea // evenimentelor, pentru interactivitate public class ElementeAplicatieSwing { public static void main(String[] args) { // codul metodei principale } } |
|
try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { } |
|
JFrame frame = new JFrame("Elementele unei
aplicatii Swing"); |
|
Container container = frame.getContentPane(); // |
|
container.setLayout(new BorderLayout()); |
In cazul programului ElementeAplicatieSwing:
- crearea unei etichete:
|
final String textEticheta = "Numarul de
actionari ale butonului: "; final JLabel
eticheta = new JLabel(textEticheta + "0
"); |
- crearea unui buton, si atasarea unei combinatii de taste echivalente,
[Alt] + I:
|
JButton buton = new JButton("Sunt un buton Swing!"); buton.setMnemonic(KeyEvent.VK_I); |
- crearea si configurarea unui panou (componenta care grupeaza spatial
alte componente):
|
JPanel panou = new JPanel(); //
Stabilirea spatiului gol care inconjoara continutul panoului panou.setBorder(BorderFactory.createEmptyBorder(
30, // sus
30, // in stanga
10, // jos
30)); // in dreapta //
Stabilirea modului de asezare (layout-ului) a componentelor panou.setLayout(new GridLayout(0, 1)); //
Adaugarea componentelor in panou panou.add(buton); panou.add(eticheta); |
|
container.add(panou,
BorderLayout.CENTER); |
Atasarea unui obiect al unei clase anonime care
implementeaza interfata ActionListener, a
carui metoda actionPerformed() trateaza actionarea
butonului:
|
buton.addActionListener(new
ActionListener() { int numActionari = 0; public void actionPerformed(ActionEvent e) { numActionari++; eticheta.setText(textEticheta
+ numActionari); } }); |
Stabilirea iesirii din program la
inchiderea ferestrei, prin atasarea
unui obiect al unei clase anonime care extinde clasa ActionListener,
a carui metoda windowClosing() trateaza inchiderea
ferestrei:
|
frame.addWindowListener(new
WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); |
Alternativa pentru stabilirea iesirii din program la inchiderea ferestrei,
incepand cu versiunea 1.3 a Java 2 SE:
|
// Alternativa, incepand cu Java 2,
versiunea 1.3: // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
Stabilirea dimensiunii ferestrei in functie de cea a componentelor:
|
frame.pack(); |
Impunerea dimensiunii ferestrei:
|
// Alternativa pentru cazul ca se
doreste impunerea unei dimensiuni // frame.setSize(400, // latime // 300); // inaltime |
|
frame.setVisible(true); |
Fereastra obtinuta prin executia programului ElementeAplicatieSwing.java:
Iata si codul unui program, TestFrame, care ilustreaza crearea unei ferestre, fara componente grafice, a carei inchidere duce la iesirea din program (script pentru compilarea si executia lui).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 1. Importul pachetelor Swing si AWT
necesare import javax.swing.*; public class TestFrame { public static void main(String[] args) { // 2. Stabilirea containerului de nivel maxim JFrame frame = new JFrame( "Fereastra cu
iesire din program la inchidere"); // 3. Stabilirea dimensiunii ferestrei frame.setSize(400, //
latime 300); // inaltime // 4. Stabilirea iesirii din
program la inchiderea ferestrei frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 5. Prezentarea ferestrei pe ecran frame.setVisible(true); } } |
In lipsa codului din linia 16 (ca in programul TestFrame2 - script pentru compilarea si executia lui) inchiderea ferestrei nu conduce la iesirea din program, ceea ce poate fi neplacut pentru utilizator.
Desigur, exista
si posibilitatea de a crea coduri mai simple, de exemplu prin compactarea etapelor 4 si 7:
|
frame.getContentPane().add(panou, BorderLayout.CENTER);
|
Exista urmatoarele modalitati de a crea containere de nivel maxim:
Programul IncludereJFrame ilustreaza crearea unei ferestre
principale prin includerea unui obiect de
tip JFrame, fereastra in care sunt asezate 5 butoane, folosind asezarea relativ la margini - BorderLayout (script
pentru compilarea si executia lui).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import java.awt.*; import
javax.swing.*; /** * Demonstreaza includerea unui obiect JFrame pentru a crea o fereastra pe ecran. */ public class IncludereJFrame { public static void
main(String[] args) { // Crearea obiectului cadru, cu titlu specificat
JFrame cadru = new JFrame("Demo includere JFrame si
asezare BorderLayout"); // Obtinerea panoului de continut
intern cadrului (container de componente) Container container = cadru.getContentPane(); //
Asezarea componentelor in panou (la 10 pixeli de marginea panoului) container.setLayout(new
BorderLayout(10, 10)); // Adaugarea a 5 butoane la panoul
cadrului (ferestrei) container.add(new JButton("Est
(Dreapta)"), BorderLayout.EAST); container.add(new JButton("Sud
(Jos)"), BorderLayout.SOUTH); container.add(new JButton("Vest
(Stanga)"), BorderLayout.WEST); container.add(new JButton("Nord
(Sus)"), BorderLayout.NORTH); container.add(new JButton("Centru"),
BorderLayout.CENTER); // Din jdk1.3, pentru terminarea
programului la inchiderea ferestrei // cadru.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //
Stabilirea dimensiunii ferestrei // - impunand dimensiunile ferestrei (nepotrivita la BorderLayout): //
cadru.setSize(100, 100); // - compactand componentele adaugate: cadru.pack(); // Stabilirea vizibilitatii ferestrei
(Atentie: implicit e false!) cadru.setVisible(true); } } |
Fereastra obtinuta prin executia programului IncludereJFrame.java:
Programul ExtensieJFrame ilustreaza crearea unei ferestre principale
prin extinderea clasei JFrame, si asezarea
relativ la margini - BorderLayout (script
pentru compilarea si executia lui).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import
java.awt.*; import
javax.swing.*; /** * Demonstreaza extinderea JFrame pentru a crea o fereastra pe ecran. */ public class ExtensieJFrame extends
JFrame { public ExtensieJFrame() { // Obtinerea panoului de continut
intern cadrului (container de componente) Container container = getContentPane(); // Asezarea componentelor in panou (la
10 pixeli de marginea panoului) container.setLayout(new
BorderLayout(10, 10)); // Adaugarea a 5 butoane la panoul
cadrului (ferestrei) container.add(new JButton("Est
(Dreapta)"), BorderLayout.EAST); container.add(new JButton("Sud
(Jos)"), BorderLayout.SOUTH); container.add(new JButton("Vest
(Stanga)"), BorderLayout.WEST); container.add(new JButton("Nord
(Sus)"), BorderLayout.NORTH); container.add(new JButton("Centru"),
BorderLayout.CENTER); } public static void main(String[]
args) { // Crearea obiectului cadru ExtensieJFrame cadru = new ExtensieJFrame(); // Adaugarea titlului ferestrei cadru.setTitle("Demo
extindere JFrame si asezare BorderLayout"); // Compactarea componentelor cadru.pack(); // Stabilirea vizibilitatii ferestrei
(Atentie: implicit e false!) cadru.setVisible(true); } } |
Fereastra obtinuta prin executia programului ExtensieJFrame.java:
Programul ExtensieJApplet ilustreaza crearea unei miniaplicatii (applet)
prin extinderea clasei JApplet, si asezarea
relativ la margini – BorderLayout (script
pentru compilarea lui).
Pentru includerea unei miniaplicatii intr-o pagina HTML in vederea
vizualizarii ei se va adauga in corpul fisierului .html urmatorul cod:
|
<APPLET CODE = "ExtensieJApplet.class"
WIDTH = 400 HEIGHT = 200 > </APPLET> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import
java.awt.*; import
javax.swing.*; /** * Demonstreaza extinderea JApplet pentru a o
miniaplicatie Java. * * Se
executa prin includerea intr-o pagina Web a unui tag HTML de genul: * <APPLET CODE = "ExtensieJApplet.class"
WIDTH = 400 HEIGHT = 200 > * </APPLET> */ public
class ExtensieJApplet extends JApplet { /** * Metoda de initializare a appletului.
Apelata de browser la prima * utilizare a appletului, stabileste
layout-ul (modul de dispunere a * componentelor in panoul de continut)
si adauga componentele in panou. */ public void init() { // Obtinerea panoului de continut
intern cadrului (container de componente) Container container = getContentPane(); // Asezarea componentelor in panou (la
10 pixeli de marginea panoului) container.setLayout(new
BorderLayout(10, 10)); // Adaugarea a 5 butoane la panoul
appletului container.add(new JButton("Est
(Dreapta)"), BorderLayout.EAST); container.add(new JButton("Sud
(Jos)"), BorderLayout.SOUTH); container.add(new JButton("Vest
(Stanga)"), BorderLayout.WEST); container.add(new JButton("Nord
(Sus)"), BorderLayout.NORTH); container.add(new JButton("Centru"),
BorderLayout.CENTER); } } |
Pagina HTML RunExtensieJApplet.html permite vizualizarea appletului ExtensieJApplet. Iata cum poate arata pagina RunExtensieJApplet.html vizualizata intr-un browser:
5. Crearea ferestrelor de dialog predefinite utilizand metodele clasei JOptionPane
Metoda showInputDialog() a clasei JOptionPane este folosita
pentru a crea dialoguri de intrare,
metoda showMessageDialog() pentru
a crea dialoguri de informare a
utilizatorului, etc.
Programele din sectiunea anterioara creau butoane care nu reactioneaza la
actionarea lor de catre utilizator.
Pentru introducerea interactivitatii, trebuie tratate evenimentele din
interfata grafica. In Java exista mai multe moduri de
tratare a evenimentelor.
Incepand cu versiunea initiala, JDK 1.0, interfetele grafice realizate cu biblioteca AWT
au 2 moduri de tratare a evenimentelor:
1. Implementand metoda action(), care:
- primeste ca parametri un obiect de tip Event care incapsuleaza evenimentul
produs, si un obiect de tip Object care incapsuleaza parametrii acestuia,
- testeaza atributele target si id ale obiectului de tip Event pentru a identifica obiectul tinta
(in care s-a produs evenimentul) si tipul de actiune produsa, si trateaza apoi evenimentul respectiv
2. Implementand metoda handleEvent(), care:
- primeste ca parametru un obiect de tip Event care incapsuleaza evenimentul produs,
- testeaza atributele target si id ale obiectului de tip Event pentru a identifica obiectul tinta
(in care s-a produs evenimentul) si tipul de actiune produsa, si trateaza apoi evenimentul respectiv
Incepand cu versiunea JDK 1.1, interfetele grafice realizate cu biblioteca AWT au:
3. Un nou mod de tratare
a evenimentelor, utilizat si de interfetele grafice Swing, care
presupune trei operatii:
- (a) declararea unei clase care implementeaza o interfata
« ascultator de evenimente », (care contine metode ce trebuie implementate de
utilizator pentru tratarea evenimentului respectiv), sau (b) declararea unei clase care extinde o clasa predefinita care
implementeaza o interfata « ascultator de evenimente »
- (a) implementarea
tuturor metodelor definite in interfata « ascultator de
evenimente », sau (b) re-implementarea
metodelor dorite din clasa extinsa care implementeaza interfata
- inregistrarea unui obiect din clasa « ascultator de
evenimente » de catre fiecare dintre componentele grafice (numite tinta
sau sursa) pentru care se doreste tratarea evenimentului respectiv
Programul ExtensieInteractivaJFrame ilustreaza crearea unei ferestre
principale prin extinderea clasei JFrame, asezarea
relativ la margini - BorderLayout, si tratarea evenimentului
« actionare » pentru componentele buton (script
pentru compilarea si executia lui).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
import
java.awt.*; import
java.awt.event.*; import
javax.swing.*; /** * Extinderea JFrame pentru a crea o
fereastra cu componente interactive pe
ecran. */ public
class ExtensieInteractivaJFrame extends JFrame { public ExtensieInteractivaJFrame()
{ // Obtinerea panoului de continut
intern cadrului (container de componente) Container container = getContentPane(); // Asezarea componentelor in panou (la
10 pixeli de marginea panoului) container.setLayout(new
BorderLayout(10, 10)); // Adaugarea a 5 butoane la panoul
cadrului (ferestrei) JButton b1 = new JButton("Est (Dreapta)"); JButton b2 = new JButton("Sud (Jos)"); JButton b3 = new JButton("Vest (Stanga)"); JButton b4 = new JButton("Nord (Sus)"); JButton
b5 = new JButton("Centru"); container.add(b1,
BorderLayout.EAST); container.add(b2,
BorderLayout.SOUTH); container.add(b3,
BorderLayout.WEST); container.add(b4,
BorderLayout.NORTH); container.add(b5,
BorderLayout.CENTER); // Inregistrarea
"ascultatorului" de "evenim.actionare" la
"sursele" evenim. b1.addActionListener(obiectAscultatorActionare); b2.addActionListener(obiectAscultatorActionare); b3.addActionListener(obiectAscultatorActionare); b4.addActionListener(obiectAscultatorActionare); b5.addActionListener(obiectAscultatorActionare); // Inregistrarea
"ascultatorului" de "evenimente fereastra " this.addWindowListener(ascultatorInchidereFereastra); } // Crearea unui obiect "ascultator"
de "evenimente actionare" ActionListener obiectAscultatorActionare = new ActionListener() { // Tratarea actionarii unui buton public void actionPerformed(ActionEvent
ev) { // Mesaj informare System.out.println("A
fost apasat un buton " + ev.getActionCommand()); }
}; // Crearea unui "adaptor pentru
ascultator" de "evenimente fereastra" WindowAdapter
ascultatorInchidereFereastra = new WindowAdapter() { // Tratarea inchiderii ferestrei
curente public void windowClosing(WindowEvent
ev) { // Terminarea programului System.exit(0); } }; public static void main(String[]
args) { // Crearea obiectului cadru ExtensieInteractivaJFrame cadru = new ExtensieInteractivaJFrame(); //
Adaugarea titlului ferestrei cadru.setTitle("Demo
extindere JFrame interactiva"); // Compactarea componentelor cadru.pack(); // Stabilirea vizibilitatii ferestrei
(Atentie: implicit e false!) cadru.setVisible(true); } } |
Programul ExtensieInteractivaJApplet ilustreaza crearea unei miniaplicatii (applet)
prin extinderea clasei JApplet, si tratarea
evenimentului « actionare » pentru componentele buton (script
pentru compilarea lui).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
Import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ExtensieInteractivaJApplet extends
JApplet { public
void init() { // Obtinerea panoului de continut
(content pane) creat de browser pentru // executia appletului
(container in care vor fi plasate componentele) Container
container = getContentPane(); // Stabilirea layout-ului panoului,
BorderLayout cu spatiu 10 pixeli container.setLayout(new BorderLayout(10, 10)); // Adaugarea a 5 butoane la panoul
appletului JButton b1 = new JButton("Est
(Dreapta)"); JButton b2 = new JButton("Sud
(Jos)"); JButton b3 = new JButton("Vest
(Stanga)"); JButton b4 = new JButton("Nord
(Sus)"); JButton b5 = new JButton("Centru"); container.add(b1, BorderLayout.EAST); container.add(b2, BorderLayout.SOUTH); container.add(b3, BorderLayout.WEST); container.add(b4, BorderLayout.NORTH); container.add(b5, BorderLayout.CENTER); //
Crearea unui obiect "ascultator" de "evenimente
actionare" // (pe
care le trateaza) ActionListener obiectAscultatorActionare
= new ActionListener() { //
Tratarea actionarii unui buton public void actionPerformed(ActionEvent ev) { //
Mesaj informare in consola Java System.out.println("A fost apasat butonul
" + ev.getActionCommand()); //
Mesaj informare in bara de stare showStatus("Apasat butonul " + ev.getActionCommand()); } }; // Inregistrarea
"ascultatorului" de "evenimente actionare" la
"sursele" // de evenimente b1.addActionListener(obiectAscultatorActionare); b2.addActionListener(obiectAscultatorActionare); b3.addActionListener(obiectAscultatorActionare); b4.addActionListener(obiectAscultatorActionare); b5.addActionListener(obiectAscultatorActionare); } } |
Pagina RunExtensieInteractivaJApplet.html permite vizualizarea applet-ului. Iata cum poate arata pagina RunExtensieJApplet.html vizualizata intr-un browser:
Programul EcouGrafic_Swing ilustreaza utilizarea componentelor grafice Swing pentru lucrul cu text, de tip JTextField si JTextArea (script pentru compilarea si executia lui).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 00 01 |
import java.awt.*; import java.awt.event.*; import javax.swing.*; /** * Ecou
grafic folosind JtextField si JTextArea */ public class EcouGrafic_Swing
extends JFrame { /** * Intrare - linie de text grafica
(JtextField) */ private static JTextField inTextGrafic; /** * Iesire - zona de text grafica
(JtextArea) */ private static JTextArea outTextGrafic; /** * Initializari grafice */ public EcouGrafic_Swing() { // Stabilire titlu fereastra (JFrame) super("Ecou grafic simplu
Swing");
Container containerCurent = this.getContentPane();
containerCurent.setLayout(new BorderLayout()); // Zona de text non-editabila de iesire (cu posibilitati de defilare) outTextGrafic
= new JTextArea(5, 40); JScrollPane scrollPane = new JScrollPane(outTextGrafic, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); containerCurent.add("Center", scrollPane); outTextGrafic.setEditable(false); // Camp de text editabil de intrare inTextGrafic = new JTextField(40);
containerCurent.add("South", inTextGrafic); System.out.println("\nPentru oprire introduceti '.' si
<Enter>\n"); //
Inregistrarea "ascultatorului" de "evenimente actionare"
la //
"obiectul sursa" intrare de text inTextGrafic.addActionListener(ascultatorInText); //
Inregistrarea "ascultatorului" de "evenimente fereastra"
la // "sursa" (fereastra curenta) this.addWindowListener(ascultatorInchidere); // Impachetarea (compactarea)
componentelor in container
pack();
// Fereastra devine vizibila - echivalent cu
frame.setVisible(true) show(); // Cerere focus pe intrarea de text din
fereastra curenta inTextGrafic.requestFocus(); } /** * Crearea unui "ascultator" de
"evenimente actionare", obiect al unei * clase "anonime" care
implementeaza interfata ActionListener */ ActionListener ascultatorInText = new ActionListener()
{ /** * Tratarea actionarii intrarii de text
(introducerii unui "Enter") */ public void actionPerformed(ActionEvent
ev) { // Citirea unei linii de text din
intrarea de text grafica String sirCitit = inTextGrafic.getText(); // Pregatirea intrarii de text pentru
noua intrare (golirea ei) inTextGrafic.setText(""); // Scrierea liniei de text in zona de text grafica outTextGrafic.append("S-a introdus: " +
sirCitit + "\n"); // Conditie terminare program if
(sirCitit.equals(new String(".")))
System.exit(0); } }; /** * Crearea unui "adaptor pentru
ascultator" de "evenimente fereastra" * Obiect al unei clase
"anonime" care extinde clasa WindowAdapter */ WindowAdapter ascultatorInchidere = new WindowAdapter()
{ /** * Tratarea inchiderii ferestrei curente */ public void windowClosing(WindowEvent
ev) { // Terminarea programului
System.exit(0); } }; /** * Punctul de intrare in program */ public
static void main (String
args[]) { EcouGrafic_Swing ecouGraficJTFJTA =
new EcouGrafic_Swing(); } } |
Fereastra obtinuta prin executia programului EcouGrafic_Swing.java:
Programul SurseMultiple
ilustreaza tratarea
evenimentelor generate de surse (componente grafice Swing) multiple (script
pentru compilarea si executia lui).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 00 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
import java.awt.*; import
java.awt.event.*; import javax.swing.*; /** * Ilustreaza
surse multiple de evenimente */ public class SurseMultiple
extends JFrame { private
JTextField intrareNume; private
JButton butonConfirmareNume; private
String nume; private
boolean numeIntrodus = false; private
JTextField intrarePrenume; private
JButton butonConfirmarePrenume; private
String prenume; private
boolean prenumeIntrodus = false; private
JTextField intrareNickname; private
JButton butonConfirmareNickname; private
String nickname; private
boolean nicknameIntrodus = false; /** * Initializeaza obiectul de tip
SurseMultiple */ public SurseSiAscultatoriMultipli() { // Apel al constructorului supraclasei
(JFrame) pentru stabilirea titlului super ("Va rugam sa va prezentati!"); // Containerul ferestrei grafice
Container containerFereastra = this.getContentPane(); // Stabilirea modului de asezare a
componentelor in fereastra (layoutului)
containerFereastra.setLayout(new GridLayout(3,2)); // Camp
de text pentru introducerea numelui
intrareNume = new JTextField(20);
containerFereastra.add(intrareNume); // Buton
pentru confirmarea introducerii numelui
butonConfirmareNume = new JButton("Numele
dvs.");
containerFereastra.add(butonConfirmareNume); // Camp
de text pentru introducerea prenumelui
intrarePrenume = new JTextField(20);
containerFereastra.add(intrarePrenume); // Buton
pentru confirmarea introducerii prenumelui butonConfirmarePrenume
= new JButton("Prenumele
dvs.");
containerFereastra.add(butonConfirmarePrenume); // Camp
de text pentru introducerea numelui utilizatorului
intrareNickname = new JTextField(20);
containerFereastra.add(intrareNickname); // Buton
pentru confirmarea introducerii numelui utilizatorului
butonConfirmareNickname = new JButton("Nume
dvs. de utilizator");
containerFereastra.add(butonConfirmareNickname); // Inregistrarea
"ascultatorilor" de "evenimente actionare" // Butoane (actionare = click pe buton) butonConfirmareNume.addActionListener(ascultatorEvenimenteActionare); butonConfirmarePrenume.addActionListener(ascultatorEvenimenteActionare); butonConfirmareNickname.addActionListener(ascultatorEvenimenteActionare); // Intrari grafice de text (actionare =
apasare <Enter>) intrareNume.addActionListener(ascultatorEvenimenteActionare); intrarePrenume.addActionListener(ascultatorEvenimenteActionare); intrareNickname.addActionListener(ascultatorEvenimenteActionare); // Inregistrarea
"ascultatorului" de "evenimente fereastra" la
"sursa" // (fereastra curenta) this.addWindowListener(ascultatorInchidere); // Impachetarea (compactarea) componentelor
in container
pack();
// Fereastra devine vizibila - echivalent cu
frame.setVisible(true) show(); } /** Crearea unui "ascultator" de
"evenimente actionare", obiect al unei * clase "anonime" care
implementeaza interfata ActionListener
*/ WindowAdapter ascultatorInchidere = new WindowAdapter()
{ public void windowClosing(WindowEvent
ev) { //
Terminarea programului
System.exit(0); } }; /** *
Crearea unui "ascultator" de "evenimente actionare" * Obiect
al unei clase "anonime" care implementeaza interfata ActionListener */ ActionListener
ascultatorEvenimenteActionare = new ActionListener() { /** * Tratarea evenimentului actionare
pentru ascultatorii inregistrati */ public void actionPerformed(ActionEvent
ev) { //
Eveniment legat de introducerea numelui if ((ev.getSource() == butonConfirmareNume) || (ev.getSource() == intrareNume)) { // Culegerea informatiilor din
intrarea text nume
= intrareNume.getText(); // Tratarea actionarilor asociate
introducerii numelui
System.out.println("A fost introdus numele: " + nume); // Dezactivarea posibilitatii de modificare a numelui intrareNume.setEditable(false);
butonConfirmareNume.setEnabled(false);
numeIntrodus = true; } //
Eveniment legat de introducerea prenumelui else
if ((ev.getSource() == butonConfirmarePrenume) ||
(ev.getSource() == intrarePrenume)) { // Culegerea informatiilor din
intrarea text
prenume = intrarePrenume.getText(); // Tratarea actionarilor asociate
introducerii numelui System.out.println("A
fost introdus prenumele: " + prenume); //
Dezactivarea posibilitatii de modificare a prenumelui intrarePrenume.setEditable(false);
butonConfirmarePrenume.setEnabled(false);
prenumeIntrodus = true; } //
Eveniment legat de introducerea numelui de utilizator else
if ((ev.getSource() == butonConfirmareNickname) ||
(ev.getSource() == intrareNickname)) { // Culegerea informatiilor din
intrarea text
nickname = intrareNickname.getText(); // Tratarea actionarilor asociate
introducerii numelui System.out.println("A fost introdus numele utilizatorului: " +
nickname); //
Dezactivarea posibilitatii de modificare a numelui de utilizator intrareNickname.setEditable(false);
butonConfirmareNickname.setEnabled(false); nicknameIntrodus = true; } if (numeIntrodus && prenumeIntrodus && nicknameIntrodus)
{ setTitle("Va numiti " + nume + prenume +
" (alias " + nickname + ")"); } } }; /** * Metoda principala */ public
static void main(java.lang.String[] args) { new
SurseMultiple(); } } |
Programul SurseSiAscultatoriMultipli ilustreaza tratarea evenimentelor
generate de surse (componente grafice Swing) multiple catre mai multi
ascultatori de evenimente (script
pentru compilarea si executia lui).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 00 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import java.awt.*; import
java.awt.event.*; import javax.swing.*; import
javax.swing.event.*; import
javax.swing.text.*; /** * Ilustreaza
surse multiple de evenimente si ascultatori multipli ai * evenimentelor */ public class SurseSiAscultatoriMultipli
extends JFrame { private JTextField intrareInformatie; private JButton butonConfirmareInformatie; private String informatie; /** *
Initializeaza obiectul de tip SurseSiAscultatoriMultipli */ public SurseSiAscultatoriMultipli()
{ // Apel al
constructorului supraclasei (JFrame) pentru stabilirea titlului super ("Surse multiple si
ascultatori multipli"); // Containerul ferestrei grafice
Container containerFereastra = this.getContentPane(); // Stabilirea modului de asezare a
componentelor in fereastra (layoutului)
containerFereastra.setLayout(new FlowLayout()); // Camp de text pentru introducerea informatiei intrareInformatie
= new JTextField(20); containerFereastra.add(intrareInformatie); // Buton
pentru confirmarea introducerii informatiei butonConfirmareInformatie
= new JButton("Informatie");
containerFereastra.add(butonConfirmareInformatie); //
Inregistrarea "ascultatorilor" de "evenimente
actionare" // Buton (actionare = click pe buton) butonConfirmareInformatie.addActionListener(ascultatorEvenimenteActionare); // Intrare
grafica de text (actionare = apasare <Enter>) intrareInformatie.addActionListener(ascultatorEvenimenteActionare); //
Inregistrarea "ascultatorilor" de "evenimente
document" // Intrare
grafica de text (inserare, eliminare) intrareInformatie.getDocument().addDocumentListener(ascultatorDocument); // Inregistrarea "ascultatorului" de
"evenimente fereastra" this.addWindowListener(ascultatorInchidere); // Impachetarea (compactarea)
componentelor in container
pack();
// Fereastra devine vizibila - echivalent cu
frame.setVisible(true) show(); } /** * Crearea
unui "ascultator" de "evenimente document" * Obiect al
unei clase "anonime" care implementeaza interfata DocumentListener */
DocumentListener ascultatorDocument = new DocumentListener() { // Tratarea evenimentului inserare in
document public void insertUpdate(DocumentEvent
ev) { Document doc = (Document)ev.getDocument(); int numarCaractere = ev.getLength(); System.out.println(numarCaractere +
" caracter" + ((numarCaractere == 1) ? " a
" : "e au ") + "fost adaugat" +
((numarCaractere == 1) ? " " : "e ") + "la document.\n" + "
Lungimea textului = " + doc.getLength()
+ "\n"); } // Tratarea evenimentului eliminare din
document public void removeUpdate(DocumentEvent
ev) { Document doc = (Document)ev.getDocument(); int numarCaractere = ev.getLength(); System.out.println(numarCaractere +
" caracter" + ((numarCaractere == 1) ? " a
" : "e au ") + "fost eliminat" +
((numarCaractere == 1) ? " " : "e ") + "din document.\n" + "
Lungimea textului = " + doc.getLength()
+ "\n"); } //Documentele text nu pot genera aceste
evenimente public void changedUpdate(DocumentEvent
ev) { } }; /** * Crearea
unui "adaptor pentru ascultator" de "evenimente
fereastra" * Obiect al
unei clase "anonime" care extinde clasa WindowAdapter */ WindowAdapter ascultatorInchidere = new WindowAdapter()
{ /** * Tratarea
inchiderii ferestrei curente */ public void windowClosing(WindowEvent
ev) { //
Terminarea programului
System.exit(0); } }; /** *
Crearea unui "ascultator" de "evenimente actionare" * Obiect
al unei clase "anonime" care implementeaza interfata ActionListener */ ActionListener
ascultatorEvenimenteActionare = new ActionListener() { // Tratarea evenimentului actionare pentru ascultatorii inregistrati public void actionPerformed(ActionEvent
ev) { // Eveniment legat de introducerea informatiei if ((ev.getSource() == butonConfirmareInformatie) || (ev.getSource() == intrareInformatie)) { //
Culegerea informatiilor din intrarea text informatie =
intrareInformatie.getText(); //
Tratarea actionarilor asociate introducerii numelui System.out.println("A fost
introdusa informatia: " + informatie); //
Dezactivarea posibilitatii de modificare a numelui intrareInformatie.setEditable(false); butonConfirmareInformatie.setEnabled(false); } }
}; /** * Metoda
principala */ public static void main(java.lang.String[]
args) { new SurseSiAscultatoriMultipli(); } } |
1. Intrare text pentru
parole
Programul PasswordDemo si un script
pentru compilarea si executia lui.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
import
javax.swing.*; import
java.awt.*; import java.awt.event.*; public
class PasswordDemo { private
static boolean isPasswordCorrect(char[]
input) { char[]
correctPassword = { 'g', 'h', 'i',
'c', 'i' }; if (input.length != correctPassword.length)
return false; for (int i = 0; i < input.length; i ++) if (input[i] != correctPassword[i])
return false; return
true; } public
static void main(String[]
argv) { final
JFrame f = new JFrame("PasswordDemo"); JLabel
label = new JLabel("Introduceti parola: "); JPasswordField passwordField = new JPasswordField(10); passwordField.setEchoChar('#'); //
Tratarea actionarii intrarii passwordField.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent
e) { JPasswordField input = (JPasswordField)e.getSource();
char[] password = input.getPassword(); if
(isPasswordCorrect(password)) { JOptionPane.showMessageDialog(f, "Succes! Password
corect."); }
else { JOptionPane.showMessageDialog(f, "Password incorect. Mai
incearca.", "Error
Message", JOptionPane.ERROR_MESSAGE); } } }); JPanel
contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(BorderFactory.createEmptyBorder(20,
20, 20, 20));
contentPane.add(label, BorderLayout.WEST);
contentPane.add(passwordField,
BorderLayout.CENTER); f.setContentPane(contentPane); f.addWindowListener(new
WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0);
} }); f.pack(); f.setVisible(true); } } |
Fereastrele obtinute prin executia programului PasswordDemo.java:
2. Butoane radio (RadioButton)
Programul RadioButtonDemo si un script
pentru compilarea si executia lui.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
import java.awt.*; import
java.awt.event.*; import javax.swing.*; public class RadioButtonDemo
extends JPanel { static
JFrame frame; static
String birdString = "Bird"; static
String catString = "Cat"; static
String dogString = "Dog"; static
String rabbitString = "Rabbit"; static
String pigString = "Pig"; JLabel
picture; public
RadioButtonDemo() { //
Create the radio buttons.
JRadioButton birdButton = new JRadioButton(birdString);
birdButton.setMnemonic(KeyEvent.VK_B);
birdButton.setActionCommand(birdString);
birdButton.setSelected(true);
JRadioButton catButton = new JRadioButton(catString); catButton.setMnemonic(KeyEvent.VK_C);
catButton.setActionCommand(catString);
JRadioButton dogButton = new JRadioButton(dogString);
dogButton.setMnemonic(KeyEvent.VK_D);
dogButton.setActionCommand(dogString);
JRadioButton rabbitButton = new JRadioButton(rabbitString);
rabbitButton.setMnemonic(KeyEvent.VK_R);
rabbitButton.setActionCommand(rabbitString);
JRadioButton pigButton = new JRadioButton(pigString);
pigButton.setMnemonic(KeyEvent.VK_P);
pigButton.setActionCommand(pigString); //
Group the radio buttons. ButtonGroup group = new ButtonGroup();
group.add(birdButton);
group.add(catButton);
group.add(dogButton);
group.add(rabbitButton);
group.add(pigButton); //
Register a listener for the radio buttons. RadioListener myListener = new RadioListener();
birdButton.addActionListener(myListener);
catButton.addActionListener(myListener); dogButton.addActionListener(myListener);
rabbitButton.addActionListener(myListener);
pigButton.addActionListener(myListener); //
Set up the picture label
picture = new JLabel(new ImageIcon("images/" + birdString +
".gif")); //
The preferred size is hard-coded to be the width of the //
widest image and the height of the tallest image. // A
real program would compute this.
picture.setPreferredSize(new Dimension(177, 122)); //
Put the radio buttons in a column in a panel
JPanel radioPanel = new JPanel();
radioPanel.setLayout(new GridLayout(0, 1));
radioPanel.add(birdButton); radioPanel.add(catButton);
radioPanel.add(dogButton);
radioPanel.add(rabbitButton);
radioPanel.add(pigButton);
setLayout(new BorderLayout());
add(radioPanel, BorderLayout.WEST);
add(picture, BorderLayout.CENTER);
setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); } /**
Listens to the radio buttons. */ class RadioListener implements
ActionListener {
public void actionPerformed(ActionEvent e) { picture.setIcon(new
ImageIcon("images/" +
e.getActionCommand() +
".gif")); } } public
static void main(String s[]) {
frame = new JFrame("RadioButtonDemo");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);} });
frame.getContentPane().add(new RadioButtonDemo(),
BorderLayout.CENTER);
frame.pack();
frame.setVisible(true); } } |
Fereastrele obtinute prin executia programului RadioButtonDemo.java:
3. Cutie de optiuni (CheckBox)
Programul CheckBoxDemo si un script
pentru compilarea si executia lui.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import java.awt.*; import
java.awt.event.*; import javax.swing.*; public class CheckBoxDemo
extends JPanel {
JCheckBox chinButton;
JCheckBox glassesButton;
JCheckBox hairButton;
JCheckBox teethButton; /* * Four
accessory choices provide for 16 different *
combinations. The image for each combination is *
contained in a separate image file whose name indicates * the
accessories. The filenames are "geek-XXXX.gif" * where
XXXX can be one of the following 16 choices. * The
"choices" StringBuffer contains the string that *
indicates the current selection and is used to generate * the
file name of the image to display.
---- // zero accessories
c--- // one
accessory -g-- --h- ---t
cg-- // two
accessories c-h- c--t -gh- -g-t --ht
-ght // three
accessories c-ht cg-t cgh-
cght // all
accessories */
StringBuffer choices; JLabel
pictureLabel; public
CheckBoxDemo() { //
Create the check boxes
chinButton = new JCheckBox("Chin"); chinButton.setMnemonic(KeyEvent.VK_C);
chinButton.setSelected(true);
glassesButton = new JCheckBox("Glasses");
glassesButton.setMnemonic(KeyEvent.VK_G);
glassesButton.setSelected(true);
hairButton = new JCheckBox("Hair");
hairButton.setMnemonic(KeyEvent.VK_H);
hairButton.setSelected(true);
teethButton = new JCheckBox("Teeth");
teethButton.setMnemonic(KeyEvent.VK_T);
teethButton.setSelected(true); //
Register a listener for the check boxes. CheckBoxListener myListener = new CheckBoxListener();
chinButton.addItemListener(myListener);
glassesButton.addItemListener(myListener);
hairButton.addItemListener(myListener); teethButton.addItemListener(myListener); //
Indicates what's on the geek.
choices = new StringBuffer("cght"); //
Set up the picture label
pictureLabel = new JLabel(new ImageIcon(
"images/geek/geek-" +
choices.toString() +
".gif"));
pictureLabel.setToolTipText(choices.toString()); //
Put the check boxes in a column in a panel JPanel
checkPanel = new JPanel();
checkPanel.setLayout(new GridLayout(0, 1));
checkPanel.add(chinButton);
checkPanel.add(glassesButton);
checkPanel.add(hairButton);
checkPanel.add(teethButton);
setLayout(new BorderLayout());
add(checkPanel, BorderLayout.WEST);
add(pictureLabel, BorderLayout.CENTER);
setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); } /**
Listens to the check boxes. */ class CheckBoxListener implements
ItemListener {
public void itemStateChanged(ItemEvent e) { int index = 0; char c = '-'; Object source = e.getItemSelectable();
if (source == chinButton) {
index = 0;
c = 'c';
} else if (source == glassesButton) {
index = 1;
c = 'g';
} else if (source == hairButton) {
index = 2;
c = 'h';
} else if (source == teethButton) {
index = 3;
c = 't';
}
if (e.getStateChange() == ItemEvent.DESELECTED)
c = '-';
choices.setCharAt(index, c);
pictureLabel.setIcon(new ImageIcon( "images/geek/geek-" +
choices.toString() +
".gif"));
pictureLabel.setToolTipText(choices.toString()); } } public
static void main(String s[]) {
JFrame frame = new JFrame("CheckBoxDemo");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
} }); frame.setContentPane(new CheckBoxDemo());
frame.pack();
frame.setVisible(true); } } |
Fereastrele obtinute prin executia programului CheckBoxDemo.java:
Applet-urile sau miniaplicatiile Java sunt portiuni
de cod Java care mostenesc clasa Applet.
Prin plasarea lor in browser-e,
applet-urile devin panouri frontale ale serviciilor distribuite oferite
de Web.
Applet-urile sunt mai intai incarcate in browser-e,
fiind apoi executate in mediul de executie oferit de acesta.
Applet-urile nu sunt aplicatii complete, ci componente
care ruleaza in mediul browser-ului.
Browser-ul actioneaza ca un framework pentru executia applet-urile (componentelor
Java).
Browser-ul informeaza applet-ul asupra evenimentelor care se petrec pe
durata de viata a applet-ului.
Serviciile oferite de browser sunt:
Clasa Applet interfata Runnable definesc metode pe care un browser le
poate invoca pe durata ciclului de viata al unui applet.
Browser-ul invoca:
Invocarea ultimelor doua metode conduce la "omorarea" tuturor firelor de executie ale applet-ului si la eliberarea tuturor resurselor applet-ului.
Urmatorul applet simplu:
import java.applet.Applet;
import
java.awt.Graphics;
public class Simple extends Applet {
StringBuffer buffer;
public void init()
{
buffer = new StringBuffer();
addItem("initializing... ");
}
public void start()
{
addItem("starting... ");
}
public void stop()
{
addItem("stopping... ");
}
public void destroy()
{
addItem("preparing for unloading...");
}
void addItem(String
newWord) {
System.out.println(newWord);
buffer.append(newWord);
repaint();
}
public void paint(Graphics
g) {
//Draw a Rectangle around the applet's display area.
g.drawRect(0, 0, size().width - 1, size().height - 1);
//Draw the current string inside the rectangle.
g.drawString(buffer.toString(), 5, 15);
}
}
permite, prin vizualizarea lui, urmarirea fazelor ciclului de viata ale unui applet.
Pentru a avea interactivitate avansata, applet-ul trebuie sa implementeze metoda run() a interfetei Runnable sau metoda run() a clasei Thread, care se executa in interiorul unui fir de executie (thread).
Miniaplicatia FirstApplet foloseste componentele multimedia integrate ale limbajului Java pentru afisarea unei imagini si redarea unui fisier de sunet.
import
java.awt.*;
import java.applet.*;
public class FirstApplet extends Applet {
Image NewImage;
public void init() {
resize(400,400);
NewImage =
getImage(getCodeBase(),”New.gif”);
}
public void paint(Graphics
g) {
g.drawString(“Hello!”);
g.drawImage(NewImage,0,0,this);
play(getCodeBase(),”New.au”);
}
}
Instructiunea import
permite miniaplicatiei sa foloseasca metode si clase din alte pachete:
import
java.awt.*;
import java.applet.*;
In mod
prestabilit, toate programele Java importa pachetul java.lang, care contine
functiile de baza ale limbajului Java. Asteriscul de la sfarsitul instructiunii
import permite importul dinamic al claselor Java. In acest exemplu, sunt
importate dinamic clasele din pachetele java.awt si java.applet.
Linia urmatoare declara o clasa numita FirstApplet care extinde clasa Applet:
public class FirstApplet extends Applet {
Prin extinderea clasei Applet, FirstApplet mosteneste functionalitatea
acestei clase. Acolada deschisa
marcheaza inceputul clasei FirstApplet.
Linia
urmatoare initializeaza variabila NewImage si o declara de a fi de tipul
Image. In acest caz, NewImage are rolul unui substituent al imaginii
care va fi afisata:
Image NewImage;
Linia urmatoare declara o metoda numita init(), care redefineste metoda init() a clasei Applet:
public void init() {
Metoda init() a clasei Applet este redefinita, astfel
incat sa puteti redimensiona fereastra inainte de afisarea imaginii. Modificatorul
public specifica faptul ca metoda este accesibila altor clase. Modificatorul
void specifica faptul ca metoda nu returneaza nici o valoare. In mod normal, argumentele acceptate de o metoda
sunt incadrate de paranteze rotunde. Deoarece metoda init() nu accepta argumente, intre paranteze nu
apare nimic.
Folosind
metoda resize(), puteti
sa redimensionati zona de afisare a miniaplicatiei. In acest exemplu,
dimensiunea zonei de afisare este stabilita la 400x400 pixeli:
resize(400,400);
Dupa ce ati
declarat o variabila de un anumit tip, puteti sa o folositi. Linia urmatoare
stabileste o valoare pentru variabila NewImage;
NewImage = getImage(getCodeBase(),
”New.gif”);
Pentru
aceasta, este folosita metoda getImage( ). Primul argument al metodei
este un apel al metodei getCodeBase(), care returneaza pozitia directorului de
baza sau a directorului curent de pe hard-disc. Directorul de baza este directorul
care contine fisierul clasei pe care o rulati. Al doilea argument este numele
imaginii care poate fi gasita in pozitia specificata.
Urmatoarea linie de cod declara o metoda numita paint( ), care redefineste metoda paint( ) din pachetul AWT:
public void paint (Graphics g) {
Metoda paint( ) este redefinita pentru a permite
miniaplicatiei sa afiseze imaginea intr-o anumita pozitie pe ecran.
Modificatorul public specifica faptul ca metoda este accesibila altor clase.
Modificatorul void specifica faptul ca metoda nu returneaza nici o valoare. La apelarea metodei paint( ),
trebuie sa folositi ca parametru un obiect al clasei Graphics.
Graphics este o clasa de baza abstracta
pentru toate obiectele grafice. Elementul g reprezinta fereastra de tip
Graphics specificata.
Linia
urmatoare apeleaza obiectul g, de tip Graphics, pentru afisarea imaginii
NewImage:
g.drawImage(NewImage,0,0,this);
Metoda care realizeaza de fapt operatiunea se numeste drawImage(
). Metoda drawImage( )
accepta argumente prin care i se precizeaza ce imagine trebuie sa afiseze si
unde. In acest exemplu, obiectul NewImage este afisat in punctul de
coordonate 0,0. Ultimul argument al metodei se numeste observator. Scopul
acestuia este sa verifice daca imaginea a fost afisata integral.
Asa cum
sugereaza si numele sau metoda play( ) este folosita pentru redarea
fisierelor de sunet. Primul argument al metodei play( ) este un apel al
metodei getCodeBase(), care returneaza pozitia directorului de baza sau a directorului curent de
pe hard-disc.
play(getCodeBase(),
”New.au”);
Directorul de
baza este directorul care contine fisierul clasei pe care o rulati. Al doilea
argument este numele fisierului de sunet care poate fi gasit in pozitia
specificata.
Crearea miniaplicatiei
Trebuie sa stocati programul FirstApplet
intr-un fisier numit FirstApplet.java. Acesta va fi salvat ca fisier
de text ASCII standard.
Compilarea miniaplicatiei FirstApplet
Compilarea unei miniaplicatii se realizeaza la fel cu compilarea unei
aplicatii. Pentru compilarea miniaplicatiei FirstApplet, folositi
compilatorul Java, javac. La compilarea unui fisier sursa, compilatorul
creeaza un fisier separat pentru fiecare clasa din program. Daca miniaplicatia are mai multe fisiere de clasa,
trebuie sa apelati interpretorul Java cu numele clasei care contine metoda
primara. Deoarece FirstApplet contine o singura declaratie de clasa,
compilatorul Java va crea un singur fisier.
Crearea unui fisier HTML
pentru miniaplicatie
Deorece miniaplicatiile pot fi
vizualizate cu ajutorul unor programe hypertext specializate, cum ar fi
browserele Web, trebuie sa creati un document HTML inainte de a putea utiliza
miniaplicatia. In cadrul acestui document, pentru incarcarea si rularea
miniaplicatiei specificate, folositi o eticheta de marcare numita APPLET. In
eticheta <APPLET> se face referire la clasele Java, nu la fisierele de
clasa care se termina cu extensia .class. Exemplul de document HTML de
mai jos contine o eticheta <APPLET> care se refera la clasa FirstApplet,
si nu la fisierul numit FirstApplet.class.
Cu ajutorul unui editor sau al unui procesor de texte, creati un fisier de
text ASCII standard, cu urmatorul continut:
<HTML>
<HEAD>
<TITLE>First Java Applet</TITLE>
</HEAD>
<BODY>
<APPLET CODE=”FirstApplet” width=400 height=400></APPLET>
</BODY>
</HTML>
Salvati acest fisier in acelasi director cu codul compilat al programului FirstApplet. Majoritatea documentelor HTML folosesc extensia .html; ar trebui sa salvati fisierul sub un nume corespunzator, cum ar fi example.html.
Rularea miniaplicatiei FirstApplet
Dupa crearea fisierelor necesare
pentru programul FirstApplet, puteti rula miniaplicatia cu ajutorul unui
program de vizualizare a hypertextului. Setul de dezvoltare Java contine un astfel de program, numit appletviewer.
In anumite sisteme, programul appletviewer este un instrument de
lucru din linia de comanda si poate fi apelat cu numele clasei pe care vreti sa
o rulati (script pentru lansarea fisierului HTML si
implicit a applet-ului in programul appletviewer).