Documente Academic
Documente Profesional
Documente Cultură
1. Scopul lucrării
2. Breviar teroretic
3. Probleme rezolvate
Problema 1
Să se scrie o aplicaţie în care se afişează o fereastră ce conţine
trei componente grafice: JTextArea pentru introducerea unui text pe
mai multe linii, JTextField pentru afişare şi un buton JButton care
atunci când se apasă determină afişarea în componenta JTextField a
numărului de linii tastate în componenta JTextArea.
Pentru a determina numărul de linii tastate în JTextArea se foloseşte
următoarea metodă din clasa JTextArea:
public int getLineCount();
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;//GridLayout, Container
import java.awt.event.*;//ActionListener, ActionEvent
class TestJTextArea
{
public static void main(String args[])
Programare grafică în Java (II) 167
{
Fereastra f = new Fereastra();
f.pack();
f.setLocationRelativeTo(null);//centrare. Dar dupa pack()
f.setVisible(true);
}
}
jtf.setText(n+"");
}
}
}
Problema 2
Să se scrie o aplicaţie în care se afişează o fereastră ce conţine
trei componente grafice: JTextField pentru introducerea unui text,
JTextField pentru afişare şi un buton JButton pentru ieşirea din
program. Atunci când se apasă tasta ENTER în primul JTextField,
textul introdus acolo va fi copiat în al doilea JTextField, cu litere mari.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
class GraficCopiereText
{
public static void main(String args[])
{
Fereastra f=new Fereastra();
f.pack();//dimensiuni imagine optima
f.setLocationRelativeTo(null);//centrare. Dar dupa pack()
f.setVisible(true);
}
}
public Fereastra()
{
this.setTitle("Copiere text");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//construieste componente:
jtfDate=new JTextField(30);
jtfDate.setEditable(true);
jtfDate.addKeyListener(new ClasaTasteListener());
JPanel jp1=new JPanel();
jp1.add(jtfDate);
jtfAfisare=new JTextField(30);
jtfAfisare.setEditable(false);
JPanel jp2=new JPanel();
jp2.add(jtfAfisare);
jbExit=new JButton("Exit");
JPanel jp3=new JPanel();
jp3.add(jbExit);
//Container intermediar:
JPanel jp=new JPanel();
jp.setLayout(new GridLayout(3,1));
jp.add(jp1);
jp.add(jp2);
jp.add(jp3);
ClasaButoaneListener bL=new ClasaButoaneListener();
jbExit.addActionListener(bL);
//Containerul final:
Container c=this.getContentPane();
c.add(jp,"South");
}
//inner class:
private class ClasaButoaneListener implements ActionListener
{
public void actionPerformed(ActionEvent ev)
{
System.exit(0);
}
}
170 Programare grafică în Java (II)
Problema 3
Se va realiza interfaţa grafică prezentată în continuare. În
aplicaţie se afişează pe rând câte o imagine. Numele imaginilor de
afişat sunt memorate în fişierul text imagini.txt, aflat în directorul
curent, câte un nume pe fiecare linie.
Exemplu de fişier imagini.txt:
mar.gif
minge.gif
bicicleta.gif
caine.gif
Imaginile sunt obiecte JLabel care au imagini pe ele, adăugate
cu metoda setIcon().
Fişierele imagine sunt de tipul .gif şi se găsesc de asemenea în
directorul curent.
Imaginile se afişează fie în ordinea din fişierul text, mergând
înainte, fie în ordine inversă, mergând înapoi, modul de afişare fiind
comandat prin două butoane.
Programare grafică în Java (II) 171
import java.io.*;
import javax.swing.*;
import java.awt.*;//GridLayout, Container
import java.awt.event.*;//ActionListener, ActionEvent
class AfisareImagini
{
public static void main(String args[])
{
JFrame f = new Fereastra();
f.pack();
f.setLocationRelativeTo(null);//centrare. Dar dupa pack()
f.setVisible(true);
}
}
public Fereastra()
{
this.setTitle("Afisare imagini");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/*
Structura fisier text:
mar.gif
caine.gif
pisica.gif
...
*/
//Citire informatii din fisierul text:
int n=0; //nr. de linii din fisier
FileReader fr=null;
BufferedReader bfr=null;
try{
fr=new FileReader("imagini.txt");
bfr=new BufferedReader(fr);
for(;;)
{
String linieCrt=bfr.readLine();
if (linieCrt==null) break;
else{
s[n]=linieCrt;
n++;
}
}
}catch (IOException e) {
System.exit(0);
}
nrTotalImagini=n;
jl=new JLabel("");
jl.setIcon(new ImageIcon(s[0]));//afisez prima imagine
JPanel jp1=new JPanel();
Programare grafică în Java (II) 173
jp1.add(jl);
jtf=new JTextField(40);
jtf.setEditable(false);
jtf.setText(s[0]);
JPanel jp2=new JPanel();
jp2.add(jtf);
AscultaButoane m=new AscultaButoane();
jbBack=new JButton("<-");
jbBack.addActionListener(m);
jbNext=new JButton("->");
jbNext.addActionListener(m);
JPanel jp3=new JPanel();
jp3.add(jbBack);
jp3.add(jbNext);
jbExit=new JButton("Exit");
jbExit.addActionListener(m);
JPanel jp4=new JPanel();
jp4.add(jbExit);
JPanel jpB=new JPanel();
jpB.setLayout(new GridLayout(3,1));
jpB.add(jp2);
jpB.add(jp3);
jpB.add(jp4);
JPanel jp=new JPanel();
jp.setLayout(new GridLayout(2,1) );
jp.add(jp1);
jp.add(jpB);
Container c=this.getContentPane( );
c.add(jp,"Center");
}
3. Probleme propuse
Problema 1
Să se scrie o aplicaţie în care se implementează un test grilă
simplu. Întrebările testului sunt memorate într-un fişier text. Fiecare
întrebare are trei variante de răspuns, dintre care doar una este corectă.
Atât întrebarea cât şi fiecare variantă de răspuns ocupă un singur rând
în fişierul text. Întrebările sunt afişate pe rând, împreună cu variantele
de răspuns, în ordinea în care apar în fişier. Răspunsul dat de utilizator
este selectat printr-un buton radio. La ieşirea din aplicaţie (atunci când
se apasă butonul Exit) se afişează într-o fereastră numărul de
răspunsuri corecte şi numărul total de întrebări din fişier ( se va folosi
pentru afişare metoda statică showMessageDialog din clasa
JOptionPane ). În fişier, la fiecare întrebare, pe lângă cele 3 variante
de răspuns, este memorat şi numărul răspunsului corect la acea
întrebare (prima variantă de răspuns are numărul 0). Numărul de
întrebări din fişier este variabil.
Exemplu de fişier text:
c. Fagaras
2
Orasul Lipova se gaseste in judetul:
a. Arad
b. Timisoara
c. Arges
0