Sunteți pe pagina 1din 8

Gestionarul de pozi ionare

Precizarea managerului de pozi ionare se face cu ajutorul metodei clasei Container


public void setLayout(LayoutManager mgr)

unde LayoutManager este o interfa

ac ionnd ca supertip.

Este posibil utilizarea uneia din urm toarele cinci implement ri


directe sau nu a acestei interfe e

componentele sunt dispuse n jurul marginii i n centru


CardLayout componentele sunt considerate ca un pachet de c r i de joc, numai
prima component fiind vizibil
FlowLayout care a fost utilizat n PrimulExempluGrafic
GridBagLayout componentele sunt pozi ionate innd cont de o serie de
restric ii (definite cu instan e ale clasei GridBagConstraints componentele
putnd avea dimensiuni variabile)
GridLayout asigur o pozi ionare a componentelor ntr-un tablou de n linii i
n coloane, componentele avnd acelea i dimensiuni

1. BorderLayout

2.
3.
4.
5.

Gestionarul de pozi ionare GridLayout


Pozi ioneaz componentele grafice sub forma unei matrici. Exist trei constructori :
GridLayout() o coloan i o singur linie
GridLayout(int nrLinii, int nrColoane) o matrice n care elementele
sunt desp r ite de spa ii egale
GridLayout(int nrLinii, int nrColoane, int spatiuOrizontal,
int spatiuVertical) o matrice n care elementele sunt desp r ite de spa iile
specificate
Gestionarul de pozi ionare BorderLayout
Este setat prin comanda
setLayout(new BorderLayout());

Acest gestionar permite pozi ionarea elementelor n pozi iile urm toare:
West

North
Center
South

East

n exemplul urm tor, cadrul are dispuse pe vertical , de sus n jos, un cmp de editare, o
bar de defilare i un alt cmp text ns n care editarea a fost inhibat . Aceste trei

componente sunt dispuse de un gestionar de pozi ionare BorderLayout n pozi iile


North, Center i South.
import java.awt.*;
import java.awt.event.*;
public class ExScrollBar extends Frame
implements AdjustmentListener, TextListener
{
Scrollbar sb;
TextField camp,needitabil;
public ExScrollBar()
{
setSize(300, 100);
setTitle("Exemplu Scrollbar");
setLayout(new BorderLayout());
setBackground(Color.gray);
add("North", camp=new TextField("", 10));
camp.addTextListener(this);
add("South", needitabil=new TextField("", 10));
needitabil.setEditable(false);
sb= new Scrollbar(Scrollbar.HORIZONTAL,20,10,0,500);
sb.addAdjustmentListener(this);
add("Center",sb);
this.addWindowListener(new WinEv());
show();
}
public static void main(String args[]) {
new ExScrollBar();
}
public void adjustmentValueChanged(AdjustmentEvent e) {
camp.setText(Integer.toString(sb.getValue()));
}
public void textValueChanged(TextEvent e) {
int n=0;
try {
n=Integer.parseInt(camp.getText());
} catch (NumberFormatException ex){
needitabil.setText("Numar incorect");
return;
}

sb.setValue(n);
needitabil.setText("");
}
//--------------------------------------- clasa interioara -----class WinEv extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
public void windowIconified(WindowEvent e) {
needitabil.setText("Cadrul a fost minimizat");
}
}
// -------------------------------------------------------------}

Clasa Panel
Permite gruparea mai multor componente grafice.
n continuare se prezint o clas care reune te o etichet (Label) i un cmp de editare
(TextField). Eticheta are rolul de a sugera ce trebuie introdus n TextField. Dac nu se
dore te ca ceea ce seintroduce s fie afi at n ecou, atunci se va transmite valoarea false
pentru cel de-al treilea parametru din constructor i pentru fiecare caracter n cmpul de
editare se va afi a *..
package CampEditare;
import java.awt.*;
public class CampEditare extends Panel{
private TextField te;
protected Label eticheta;
public CampEditare ( String text, int nrcol, boolean ecou )
{
setLayout(new GridLayout(1, 2, 20, 20));
add (eticheta = new Label(text, Label.RIGHT));
add (te = new TextField(nrcol));
if(ecou==false) te.setEchoChar('*');
}
public String valoare()
{
return te.getText();

}
public void init() {
te.setText("");
}
}

S-a folosit gestionarul GridLayout pentru a asigura dispunerea pe orizontal a celor


dou componente, eticheta fiind pozi ionat nainte de instan a TextField.
Un exemplu de utilizare a noii componente grafice CampEditare se reg se te programul
urm tor de rezolvarea a ecua iei de gradul I.
import java.awt.*;
import java.awt.event.*;
import CampEditare.CampEditare;
public class EcuatieGrad1_Panel extends Frame implements
ActionListener {
double a,b;
CampEditare coefA=new CampEditare("a:",10,true),
coefB=new CampEditare("b:",10,true);
Button rez;
Label sol;
public EcuatieGrad1_Panel() {
super("Rezolvarea ec. de grad I");
setLayout(new FlowLayout());
setSize(300, 150);
setBackground(Color.lightGray);
add(coefA);
add(coefB);
add(rez=new Button("Rezolva"));
rez.addActionListener(this);
add(sol=new Label("Introduceti coeficientii"));
show();
}
public void actionPerformed(ActionEvent e)
{
try {
a=Double.parseDouble(coefA.valoare());
b=Double.parseDouble(coefB.valoare());
} catch (NumberFormatException err) {
sol.setText("Numar incorect");
return ;
}
if(a!=0) sol.setText("x="+(-b/a));
else sol.setText("Ecuatie incompatibila");
}

public static void main(String args[]) {


new EcuatieGrad1_Panel();
}
}

Exemplu. Citirea datelor comandat de un buton


n laboratorul 9 referitor la arbori aveti de realizat o sincronizare a citirii unor valori prin
efectuarea unui click pe buton atunci cand s-a apasat pe buton.
Pentru aceasta s-a construit o clas CampEditareButon care extinde clasa precedent
prin ad ugarea unui buton i a unor noi metode.
package CampEditare;
import java.awt.*;
import java.awt.event.*;
public class CampEditareButon extends CampEditare implements
ActionListener
{
Button b=null;
String textButon;
public CampEditareButon (String textEticheta,
int nrcol, boolean ecou,
String textButon )
{
super(textEticheta,nrcol,ecou);
this.textButon = textButon;
if(!textButon.equals("")){
add(b=new Button( textButon ));
b.addActionListener(this);
}
}
//-----------------------------------------------------private boolean gata;
public String citesteCamp()
{
gata=false;
while(!gata); // asteapta ca in camp sa fie
// introdusa o valoare si sa se
// actioneze butonul Citeste
String s= valoare();
init(); // sterge camp pt. a marca sfarsit citire
return s;
}
public void actionPerformed(ActionEvent e)
{
String sirButon = e.getActionCommand();

if (sirButon.equals(textButon)) gata = true;


}
//-----------------------------------------------------public void setTextEticheta(String text)
{
eticheta.setText( text );
}
public void setTextButon(String text)
{
b.setLabel( text );
textButon=text;
}
}

Pentru a demonstra functionarea acestei clase s-a utilizat clasa urm toare:
import CampEditare.*;
import java.awt.*;
public class Demo_CampEditareButon {
public static void main(String a[])
{
CampEditareButon cb;
Label citit;
Frame f= new Frame("Demo sd_lab_9");
f.setLayout( new BorderLayout());
f.setSize(350,90);
cb = new CampEditareButon("Introduceti un sir",
5, true, "Citeste");
f.add("North", cb);
f.add("South", citit=new Label(""));
f.show();

while(true)
citit.setText("S-a introdus: "+
cb.citesteCamp());

n continuare se pezint imaginea ferestrei produse de aplicatie.

Aten ie. Atunci cnd ac iona i butonul, focus-ul r mne pe buton. Dac dori i s
introduce i o nou valoare va trebui s muta i focus-ul n cmpul de editare (cu tab, sau

click cu mouse-ul). n figura de mai sus se prezint situa ia de dup o citire a irului
127, TextField a fost ters, iar focus-ul a fost transferat n TextField.
Exerci iu 1. Acest inconvenient poate fi remediat i prin program cu o func ie care s
transfere automat focus-ul n TextField.
Exerci iu2. Realiza i o clas CampEditareEnter care sa considere ca s+a incheiat
citirea unei valori atunci cnd s-a tastat ENTER.

TUTORIAL SUN
S-au (re)discutat urmatoarele probleme:
Mostenire

class Super {
Number aNumber;
}
class Subbie extends Super {
Float aNumber;
}
The aNumber variable in Subbie hides aNumber
aNumber from Subbie with
super.aNumber

in Super. But you can access Super'


s

Clase abstracte

abstract class Number {


. . .
}

If you attempt to instantiate an abstract class, the compiler displays an error similar to the
following and refuses to compile your program:
AbstractTest.java:6: class AbstractTest is an abstract class.
It can't be instantiated.
new AbstractTest();
^
1 error

The GraphicObject class would look something like this:


abstract class GraphicObject {
int x, y;
. . .
void moveTo(int newX, int newY) {
. . .
}
abstract void draw();
}

Each non-abstract subclass of GraphicObject, such as Circle and Rectangle, would


have to provide an implementation for the draw method.

class Circle extends GraphicObject {


void draw() {
. . .
}
}
class Rectangle extends GraphicObject {
void draw() {
. . .
}
}

Questions and Exercises: Managing Inheritance


Questions
1. Consider the following two classes:
public class ClassA {
public void methodOne(int i) {
}
public void methodTwo(int i) {
}
public static void methodThree(int i) {
}
public static void methodFour(int i) {
}
}
public class ClassB extends ClassA {
public static void methodOne(int i) {
}
public void methodTwo(int i) {
}
public void methodThree(int i) {
}
public static void methodFour(int i) {
}
}

a. Which method overrides a method in the superclass?


b. Which method hides a method in the superclass?
c. What do the other methods do?
2. Consider the Card , Deck , and DisplayDeck classes you wrote in the previous
exercise. What Object methods should each of these classes override?

Exercises

1. Write the implementations for the methods that you answered in question 2.
2. Write an abstract class. Write at least two of its nonabstract subclasses.