Java


10. Tworzenie graficznego łącza z użytkownikiem

10.1. Elementy biblioteki AWT

Graficzne łącze do współpracy z użytkownikiem programu (GUI - Graphical User's Interface) można łatwo zbudować za pomocą zestawu Abstrakcyjnych Narzędzi Okienkowych (AWT - Abstract Windowing Toolkit).

Elementy AWT (pakiet java.awt) tworzą hierarchię klas pokazaną na następnej stronie:

Aby składnik AWT pojawił się na ekranie musimy najpierw stworzyć odpowiedni obiekt, a następnie dodać go do aktualnego pojemnika za pomocą metody add ( ). Na przykład, aby na aplecie pojawił się przycisk z napisem „Koniec”, inicjujemy aplet w taki sposób:

public void init ( ) {

Button b = new Button(”Koniec”);

add ( b );


0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic


Dodanie składnika AWT nie przesądza o jego pozycji względem pojem­nika. Decyduje o tym aktualny układacz elementów (layout manager):

  1. FlowLayout ( )

  2. GridLayout ( )

  3. BorderLayout ( )

  4. CardLayout ( )

  5. GridBagLayout ( )

Wyboru układacza dokonujemy za pomocą instrukcji

Domyślnie stosowany jest układacz FlowLayout ( ), który układa składniki według kolejności dodawania centrując je w wierszach. Jako argumenty można podać inne sposoby wyrównania oraz odstępy poziome i pionowe, np.

setLayout ( new FlowLayout ( FlowLayout.LEFT, 30, 10 ) );

Układacz GridLayout pozwala określić wymiary tabeli, w której klatkach będą umieszczane kolejne składniki AWT:

setLayout ( new GridLayout ( 3, 2 ) );

Podając 2 dodatkowe argumenty możemy określić poziome i pionowe odstępy pomiędzy składnikami:

setLayout ( new GridLayout ( 3, 2, 10, 30 ) );

Układacz BorderLayout umieszcza 4 składniki na obrzeżu panelu, rezerwując dla każdego z nich jak najmniej miejsca. Piąty składnik zajmuje cały środkowy obszar panelu. Wybieramy ten rodzaj układacza przez zlecenie

setLayout ( new BorderLayout ( ) );

lub

setLayout ( new BorderLayout ( 10, 30 ) );

gdy chcemy ustalić odstępy. Natomiast w metodzie add ( ) musimy podać położenie każdego z dodawanych składników. Służą do tego napisy ”North”, ”East”, ”South”, ”West”, ”Center”, np.

add ( ”North”, new Button ( ”Jeden” ) );

Poniższy przykład ilustruje stosowanie prostych układaczy elementów.

Przykład

import java.awt.*;

public class Uklady extends java.applet.Applet {

public void init ( ) {

setBackground ( Color.blue );

// domyślny układacz FlowLayout

Panel p1 = new Panel ( );

p1.setBackground ( Color.green );

p1.add ( new Button ( "P11" ) );

p1.add ( new Button ( "P12" ) );

p1.add ( new Button ( "P13" ) );

p1.add ( new Button( "P14" ) );

add ( p1 );

// układacz GridLayout

Panel p2 = new Panel ( );

p2.setBackground ( Color.red );

p2.setLayout ( new GridLayout ( 2, 2, 10, 10) );

p2.add ( new Button ( "P21" ) );

p2.add ( new Button ( "P22" ) );

p2.add ( new Button ( "P23" ) );

p2.add ( new Button ( "P24" ) );

add ( p2 );

// układacz BorderLayout

Panel p3 = new Panel ( );

p3.setBackground ( Color.white );

p3.setLayout ( new BorderLayout ( 10, 10) );

p3.add ( "North", new Button ( "P31" ) );

p3.add ( "East", new Button ( "P32" ) );

p3.add ( "South", new Button ( "P33" ) );

p3.add ( "West", new Button ( "P34" ) );

p3.add ( "Center", new Button ( "P35" ) );

add ( p3 );

}

}

Układacz GridBagLayout ( ) daje największe możliwości, ale jest trudniejszy w użyciu. Elementy układamy za pomocą tego układacza na siatce prostokątnej, lecz w odróżnieniu od układacza GridLayout ( ) mogą one zajmować kilka klatek. Dodatkowo możemy wpływać na proporcje elementów.

Parametry sterujące umieszczeniem kolejnego elementu powinny być przekazane do następujących zmiennych instancyjnych obiektu klasy GridBagConstraints:

gridx,
gridy

współrzędne elementu na siatce (klatka zajmowana przez lewy górny róg)

gridwidth,
gridheight

liczba kolumn i wierszy zajmowanych przez element

weightx,
weighty

wagi wymiarów elementu

Kolejność postępowania jest taka:

1) zgłaszamy ukladacz

GridBagLayout gbl = new GridBagLayout ( );

2) tworzymy obiekt pomocniczy

GridBagConstraints gbc = new GridBagConstraints ( );

I przekazujemy mu parametry elementu el.

3) kojarzymy ten obiekt z układaczem i elementem za pomocą metody

gbl.setConstraints ( el, gbc );

Przykład

Utworzymy łącze do komunikacji z użytkownikiem, które będzie zawierało 3 panele:

  1. panel grafiki;

  2. panel komunikatów;

  3. panel przycisków.

Niech panele te mają być rozłożone w następujacy sposób:

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

h

import java.awt.*;

public class Przycisk1 extends java.applet.Applet {

Panel grafika;

Panel komunikaty;

Panel przyciski;

GridBagLayout gbl;

GridBagConstraints gbc;

static final int D = 10; // margines wewnętrzny

void buildConstraints ( GridBagConstraints gbc,
int gx, int gy, int gw, int gh,
int wx, int wy ) {

gbc.gridx = gx;

gbc.gridy = gy;

gbc.gridwidth = gw;

gbc.gridheight = gh;

gbc.weightx = wx;

gbc.weighty = wy;

}

public Insets getInsets ( ) {

return new Insets ( D, D, D, D );

}

public void init ( ) {

setBackground ( Color.lightGray );

gbl = new GridBagLayout ( );

gbc = new GridBagConstraints ( );

setLayout ( gbl );

gbc.fill = GridBagConstraints.BOTH;

gbc.anchor = GridBagConstraints.CENTER;

buildConstraints ( gbc, 0, 0, 1, 1, 80, 80, D, D );

grafika = new Panel ( );

grafika.setBackground ( Color.yellow );

gbl.setConstraints ( grafika, gbc );

add ( grafika );

buildConstraints ( gbc, 0, 1, 2, 1, 100, 20, D, D );

komunikaty = new Panel ( );

komunikaty.setBackground ( Color.green );

gbl.setConstraints ( komunikaty, gbc );

add ( komunikaty );

buildConstraints ( gbc, 1, 0, 1, 1, 20, 80, D, D );

przyciski = new Panel ( );

przyciski.setBackground ( Color.blue );

gbl.setConstraints ( przyciski, gbc );

add ( przyciski );

przyciski.setLayout ( new GridLayout ( 3, 1, D, D ));

przyciski.add ( new Button ( "Open" ));

przyciski.add ( new Button ( "Close" ));

przyciski.add ( new Button ( "Exit" ));

}

}

Adam Borkowski Język programowania „Java” 10−1

Adam Borkowski Język programowania „Java” 10−4

Applet

Textfield

Label

Frame

Panel

Window

Checkbox

Canvas

Button

Container

Component

Label

TextField

Panel

Applet

Label

TextField

Panel

Frame

EXIT

CLOSE

OPEN



Wyszukiwarka

Podobne podstrony:
Java Media FreamWork
java 2
Projekt java
JAVA tablice
Inzynieria oprogramowania w ujeciu obiektowym UML wzorce projektowe i Java iowuje
Java Przewodnik dla poczatkujacych Wydanie V javpp5
zasady grupy, java, javascript, oprogramowanie biurowe, programowanie, programowanie 2, UTK, systemy
praktyczny kurs java NX2M5DXARLEHY6NHXOS5FJHKLI6ACRLQQSDRS2Q
notatki java 08
Praktyczny kurs Java
Java praca domowa 10
java 3 id 226367 Nieznany
Java Coding rules
java object serialization speci Nieznany
java script TY2DWI33KJCAKQBCFPFEFQ736KLTSQZ3F6JQE2Q
JP SS 4 start Java
notatki java 05
java swing
notatki java 07
helion java cwiczenia zaawansow Nieznany

więcej podobnych podstron