Zgryźliwość kojarzy mi się z radością, która źle skończyła.
XIII Tworzenie interfejsu graficznego
XIII.1 Główne okno programu - klasa JFrame
Aby utworzy¢ okno, w którym chcemy co± pokaza¢ musimy najpierw stworzy¢ obiekt klasy JFrame, np.:
JFrame okno;
Musimy tak»e załadowa¢ pakiet
swing
. Nale»y wi¦c w programie umie±ci¢ instrukcj¦:
import javax.swing.*;
W klasie JFrame mo»emy posługiwa¢ si¦ metodami:
metoda
opis
JFrame okno;
JPanel pan;
boolean war;
int w,h,x,y;
powoduje wyj±cie z programu po zamkni¦ciu okna
okno.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE)
okno.setVisible(boolean flag)
je±li flag=true to okno jest widoczne
okno.setTitle(”nazwa okna”)
informacja wy±wietlajaca si¦ na górnej belce okna
okno.setResizable(boolean flag)
je±li flag=true to okno mo»na skalowa¢ przy uzyciu myszki
okno.setSize(int w, int h)
ustala rozmiar okna (w-szeroko±¢, h-wysoko±¢ w pikselach)
okno.setLocation(int x, int y)
ustalane jest poło»enie lewego górnego rogu okna
okno.setContentPane(pan)
ładuje panel dla naszego okna(wyja±nienie czym jest panel
znajduje si¦ w kolejnym podrozdziale)
okno.pack()
po umieszczeniu składników w panelu i załadowaniu - panel
jest uruchamiany (wyja±nienie w kolejnym podrozdziale)
Napiszemy teraz program, który utworzy okno o ustalonych wymiarach geometrycznych, których nie mo»na
zmienia¢:
1
import javax.swing.*;
2
class okienko{
3
public static void main(String[] args){
4
JFrame okno=new JFrame();
5
//wlasnosci
6
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
7
okno.setVisible(true);
8
//wlasnosci - rozmiar
9
okno.setResizable(false);
10
okno.setSize(400,200);
11
okno.setLocation(200,200);
12
//informacja wyswietlana w naglowku
13
okno.setTitle("glowne okno programu");
1
14
}
15
}
XIII.2 Zawarto±¢ okna - klasa JPanel
Program przedstawiony w poprzednim podrozdziale tworzy tylko okno. Okno to mo»na podzieli¢ na dwie cz¦±ci:
górn¡, w której widnieje jaka± informacja (kolor niebieski) oraz cz¦±¢ dolna w kolorze szarym. Ta dolna cz¦±¢
słu»y do umieszczania składników takich jak: przyciski, pola tekstowe, czy obszarów do rysowania. Aby móc za-
rz¡dza¢ doln¡ cz¦±ci¡ okna nale»y posłu»y¢ si¦ ”kontenerem” (content pane). Mo»na posłuzyc si¦ standardowym
kontenerem lub utworzy¢ go samemu. Zajmiemy si¦ t¡ drug¡ mo»liwo±ci¡.
Składania polecenia tworz¡cego potrzebny obiekt jest nast¦puj¡ca:
JPanel ob=new JPanel();
Metody dost¦pne dla obiektu klasy JPanel:
metoda
opis
int x,y;
JPanel pan=new JPanel();
Dimension roz=new Dimension(x,y);
Color kolor;
pan.setLayout(new Layout)
sposób rozmieszczania składników w panelu okre±la Lay-
out(np.: Layout=FlowLayout(),BorderLayout(), GridLay-
out(),BoxLayout()itp.)
pan.setPreferredSize(roz)
ustala rozmiar panelu
pan.setBackgroud(kolor)
tło
pan.add(składnik)
dodaje do panelu okre±lony składnik (np. przycisk lub pole
tekstowe)
Wykorzystuj¡c powy»sze informacje mo»emy rozszerzy¢ program z poprzedniego podrozdziału w celu pro-
stego sformatowania okna.
1
import java.awt.*;
2
import javax.swing.*;
3
class panel{
4
public static void main(String[] args){
5
6
JFrame okno=new JFrame();
7
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
8
okno.setVisible(true);
9
okno.setResizable(false);
10
okno.setSize(400,200);
11
okno.setLocation(200,200);
12
okno.setTitle("glowne okno programu");
13
14
Color c=new Color(250,0,0,255);
15
Dimension rozmiar=new Dimension(370,370);
16
//tworzymy panel w glownym oknie programu
17
JPanel p=new JPanel();
18
p.setLayout(new FlowLayout());
19
p.setPreferredSize(rozmiar);
20
p.setBackground(c);
2
21
okno.setContentPane(p);
22
okno.pack();
23
}
24
}
Uwagi:
•
W linii 14 definiujemy kolor tła panelu, a w linii 15 jego rozmiary.
•
W linii 21 ładujemy stworzony panel do obiektu okno.
•
W linii 22 metoda pack powoduje wy±wietlenie panelu w oknie.
XIII.3 Pola tekstowe jednolinijkowe- klasa JTextField
Najprostszym składnikiem jest pole tekstowe. W polu tekstowym mo»na wypisywa¢ jakie± informacje (Output)
lub te informacje pobiera¢ (Input). Pole tekstowe jest obiektem o okre±lonej nazwie. Tworz¡c je mo»emy od
razu okre±li¢ jego rozmiar (ilo±¢ znaków):
JTextField nazwa_pola=new JTextField(int ilosc_znakow);
mo»na tak»e pole zainicjowa¢ napisem (wówczas jego rozmiar jest ustalany na podstawie ilo±ci znaków w
napisie):
JTextFiled nazwa_pola=new JTextField("napis inicjuj¡cy");
Metody dostepne w klasie JTextField:
metoda
opis
String s="napis";
JTextField pole=new JTextField(s);
Font czcionka;
boolean war;
s=pole.getText()
pobiera tekst z pola tekstowego
pole.setFont(czcionka)
ustawia parametry czcionki u»ytej w polu tekstowym
pole.setText(s)
wstawia napis do pola tekstowego
pole.setEditable(war)
je±li war=false to do pola tekstowego nie mo»na wpisywa¢
tekstu z zewn¡trz (brak interaktywno±ci)
W poni»szym programie tworzone s¡ 2 pola tekstowe. Czcionka w jednym z nich jest standardowa a w drugim
parametry czcionki s¡ zmieniane.
1
import java.awt.*;
2
import javax.swing.*;
3
class tekst{
4
public static void main(String[] args){
5
6
JFrame okno=new JFrame();
3
7
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
8
okno.setVisible(true);
9
10
JPanel p=new JPanel();
11
p.setLayout(new FlowLayout());
12
p.setPreferredSize(new Dimension(200,200));
13
p.setBackground(Color.blue);
14
15
String s1="pole 1";
16
String s2="pole 2";
17
Font czcionka=new Font("Dialog", Font.ITALIC+Font.BOLD,20);
18
JTextField pole1=new JTextField(s1);
19
JTextField pole2=new JTextField(s2);
20
pole1.setFont(czcionka);
21
p.add(pole1);
22
p.add(pole2);
23
okno.setContentPane(p);
24
okno.pack();
25
}
26
}
Uwagi:
•
W linii 18 i 19 tworzymy 2 pola tekstowe i inicjujemy je.
•
W linii 20 ustalamy parametry czcionki wy±wietlanej w polu tekstowym 1. Wi¦cej o parametrach czcionki
w dodatku (Klasa Font).
•
W liniach 21 i 22 dodajemy utworzone pola tekstowe do panelu.
XIII.4 Pola tekstowe wielolinijkowe- klasa JTextArea
Mo»na utworzy¢ tak»e pola tekstowe, w których tekst wy±wietlany jest w wi¦cej ni» jednej linijce. Takie pola
tekstowe s¡ obiektami klasy JTextArea.
Definicje takich obiektów mog¡ wygl¡da¢ nast¦puj¡co:
int x,y; //x-ilosc kolumn, y - ilosc wierszy
String s="jakis napis";
JTextArea pole=new JTextArea(x,y);
lub
JTextArea pole=new JTextArea(s,x,y);
Metody dost¦pne w klasie JTextArea:
4
metoda
opis
String s;
int i,pos,rozmiar;
Font czcionka;
JTextArea pole;
pole.append(s)
dopisuje napis s do ko«ca pola tekstowego
i=pole.getLineCount()
podaje ilo±¢ wierszy w polu tekstowym
pole.setLineWrap(true)
zapobiega rozszerzaniu wierszy (łamie wiersze)
pole.setWrapStyleWord(true)
je±li wyrazy nie mieszcz¡ si¦ na ko«cu linii s¡ wówczas prze-
noszone do nowej linii
pole.insert(s,pos)
wstawia napis s na pozycji pos
pole.setFont(czcionka)
ustala parametry czcionki
pole.setTabSize(rozmiar)
ustawia rozmiar tabulacji
pole.setCaretPosition(rozmiar)
ustala pozycj¦ kursora
s=pole.getText()
pobiera tekst z całego pola tekstowego
i=pole.getLineStartOset(n line)
podaje numer znaku stoj¡cego na pocz¡tku linii n line
i=pole.getLineEndOset(n line)
podaje numer znaku stojacego na ko«cu linii n line
Poni»szy program tworzy pole tekstowe wielolinijkowe.
1
import java.awt.*;
2
import javax.swing.*;
3
class tekst_2{
4
public static void main(String[] args){
5
6
JFrame okno=new JFrame();
7
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
8
okno.setVisible(true);
9
10
JPanel p=new JPanel();
11
p.setLayout(new FlowLayout());
12
p.setPreferredSize(new Dimension(200,200));
13
p.setBackground(Color.blue);
14
15
String s="pole tekstowe";
16
Font czcionka=new Font("Dialog", Font.ITALIC+Font.BOLD,10);
17
JTextArea pole=new JTextArea(s,10,10);
18
pole.setEditable(true);
19
pole.setFont(czcionka);
20
21
pole.setLineWrap(true);
22
pole.setWrapStyleWord(true);
23
24
pole.setTabSize(5);
5
zanotowane.pl doc.pisz.pl pdf.pisz.pl hannaeva.xlx.pl
XIII.1 Główne okno programu - klasa JFrame
Aby utworzy¢ okno, w którym chcemy co± pokaza¢ musimy najpierw stworzy¢ obiekt klasy JFrame, np.:
JFrame okno;
Musimy tak»e załadowa¢ pakiet
swing
. Nale»y wi¦c w programie umie±ci¢ instrukcj¦:
import javax.swing.*;
W klasie JFrame mo»emy posługiwa¢ si¦ metodami:
metoda
opis
JFrame okno;
JPanel pan;
boolean war;
int w,h,x,y;
powoduje wyj±cie z programu po zamkni¦ciu okna
okno.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE)
okno.setVisible(boolean flag)
je±li flag=true to okno jest widoczne
okno.setTitle(”nazwa okna”)
informacja wy±wietlajaca si¦ na górnej belce okna
okno.setResizable(boolean flag)
je±li flag=true to okno mo»na skalowa¢ przy uzyciu myszki
okno.setSize(int w, int h)
ustala rozmiar okna (w-szeroko±¢, h-wysoko±¢ w pikselach)
okno.setLocation(int x, int y)
ustalane jest poło»enie lewego górnego rogu okna
okno.setContentPane(pan)
ładuje panel dla naszego okna(wyja±nienie czym jest panel
znajduje si¦ w kolejnym podrozdziale)
okno.pack()
po umieszczeniu składników w panelu i załadowaniu - panel
jest uruchamiany (wyja±nienie w kolejnym podrozdziale)
Napiszemy teraz program, który utworzy okno o ustalonych wymiarach geometrycznych, których nie mo»na
zmienia¢:
1
import javax.swing.*;
2
class okienko{
3
public static void main(String[] args){
4
JFrame okno=new JFrame();
5
//wlasnosci
6
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
7
okno.setVisible(true);
8
//wlasnosci - rozmiar
9
okno.setResizable(false);
10
okno.setSize(400,200);
11
okno.setLocation(200,200);
12
//informacja wyswietlana w naglowku
13
okno.setTitle("glowne okno programu");
1
14
}
15
}
XIII.2 Zawarto±¢ okna - klasa JPanel
Program przedstawiony w poprzednim podrozdziale tworzy tylko okno. Okno to mo»na podzieli¢ na dwie cz¦±ci:
górn¡, w której widnieje jaka± informacja (kolor niebieski) oraz cz¦±¢ dolna w kolorze szarym. Ta dolna cz¦±¢
słu»y do umieszczania składników takich jak: przyciski, pola tekstowe, czy obszarów do rysowania. Aby móc za-
rz¡dza¢ doln¡ cz¦±ci¡ okna nale»y posłu»y¢ si¦ ”kontenerem” (content pane). Mo»na posłuzyc si¦ standardowym
kontenerem lub utworzy¢ go samemu. Zajmiemy si¦ t¡ drug¡ mo»liwo±ci¡.
Składania polecenia tworz¡cego potrzebny obiekt jest nast¦puj¡ca:
JPanel ob=new JPanel();
Metody dost¦pne dla obiektu klasy JPanel:
metoda
opis
int x,y;
JPanel pan=new JPanel();
Dimension roz=new Dimension(x,y);
Color kolor;
pan.setLayout(new Layout)
sposób rozmieszczania składników w panelu okre±la Lay-
out(np.: Layout=FlowLayout(),BorderLayout(), GridLay-
out(),BoxLayout()itp.)
pan.setPreferredSize(roz)
ustala rozmiar panelu
pan.setBackgroud(kolor)
tło
pan.add(składnik)
dodaje do panelu okre±lony składnik (np. przycisk lub pole
tekstowe)
Wykorzystuj¡c powy»sze informacje mo»emy rozszerzy¢ program z poprzedniego podrozdziału w celu pro-
stego sformatowania okna.
1
import java.awt.*;
2
import javax.swing.*;
3
class panel{
4
public static void main(String[] args){
5
6
JFrame okno=new JFrame();
7
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
8
okno.setVisible(true);
9
okno.setResizable(false);
10
okno.setSize(400,200);
11
okno.setLocation(200,200);
12
okno.setTitle("glowne okno programu");
13
14
Color c=new Color(250,0,0,255);
15
Dimension rozmiar=new Dimension(370,370);
16
//tworzymy panel w glownym oknie programu
17
JPanel p=new JPanel();
18
p.setLayout(new FlowLayout());
19
p.setPreferredSize(rozmiar);
20
p.setBackground(c);
2
21
okno.setContentPane(p);
22
okno.pack();
23
}
24
}
Uwagi:
•
W linii 14 definiujemy kolor tła panelu, a w linii 15 jego rozmiary.
•
W linii 21 ładujemy stworzony panel do obiektu okno.
•
W linii 22 metoda pack powoduje wy±wietlenie panelu w oknie.
XIII.3 Pola tekstowe jednolinijkowe- klasa JTextField
Najprostszym składnikiem jest pole tekstowe. W polu tekstowym mo»na wypisywa¢ jakie± informacje (Output)
lub te informacje pobiera¢ (Input). Pole tekstowe jest obiektem o okre±lonej nazwie. Tworz¡c je mo»emy od
razu okre±li¢ jego rozmiar (ilo±¢ znaków):
JTextField nazwa_pola=new JTextField(int ilosc_znakow);
mo»na tak»e pole zainicjowa¢ napisem (wówczas jego rozmiar jest ustalany na podstawie ilo±ci znaków w
napisie):
JTextFiled nazwa_pola=new JTextField("napis inicjuj¡cy");
Metody dostepne w klasie JTextField:
metoda
opis
String s="napis";
JTextField pole=new JTextField(s);
Font czcionka;
boolean war;
s=pole.getText()
pobiera tekst z pola tekstowego
pole.setFont(czcionka)
ustawia parametry czcionki u»ytej w polu tekstowym
pole.setText(s)
wstawia napis do pola tekstowego
pole.setEditable(war)
je±li war=false to do pola tekstowego nie mo»na wpisywa¢
tekstu z zewn¡trz (brak interaktywno±ci)
W poni»szym programie tworzone s¡ 2 pola tekstowe. Czcionka w jednym z nich jest standardowa a w drugim
parametry czcionki s¡ zmieniane.
1
import java.awt.*;
2
import javax.swing.*;
3
class tekst{
4
public static void main(String[] args){
5
6
JFrame okno=new JFrame();
3
7
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
8
okno.setVisible(true);
9
10
JPanel p=new JPanel();
11
p.setLayout(new FlowLayout());
12
p.setPreferredSize(new Dimension(200,200));
13
p.setBackground(Color.blue);
14
15
String s1="pole 1";
16
String s2="pole 2";
17
Font czcionka=new Font("Dialog", Font.ITALIC+Font.BOLD,20);
18
JTextField pole1=new JTextField(s1);
19
JTextField pole2=new JTextField(s2);
20
pole1.setFont(czcionka);
21
p.add(pole1);
22
p.add(pole2);
23
okno.setContentPane(p);
24
okno.pack();
25
}
26
}
Uwagi:
•
W linii 18 i 19 tworzymy 2 pola tekstowe i inicjujemy je.
•
W linii 20 ustalamy parametry czcionki wy±wietlanej w polu tekstowym 1. Wi¦cej o parametrach czcionki
w dodatku (Klasa Font).
•
W liniach 21 i 22 dodajemy utworzone pola tekstowe do panelu.
XIII.4 Pola tekstowe wielolinijkowe- klasa JTextArea
Mo»na utworzy¢ tak»e pola tekstowe, w których tekst wy±wietlany jest w wi¦cej ni» jednej linijce. Takie pola
tekstowe s¡ obiektami klasy JTextArea.
Definicje takich obiektów mog¡ wygl¡da¢ nast¦puj¡co:
int x,y; //x-ilosc kolumn, y - ilosc wierszy
String s="jakis napis";
JTextArea pole=new JTextArea(x,y);
lub
JTextArea pole=new JTextArea(s,x,y);
Metody dost¦pne w klasie JTextArea:
4
metoda
opis
String s;
int i,pos,rozmiar;
Font czcionka;
JTextArea pole;
pole.append(s)
dopisuje napis s do ko«ca pola tekstowego
i=pole.getLineCount()
podaje ilo±¢ wierszy w polu tekstowym
pole.setLineWrap(true)
zapobiega rozszerzaniu wierszy (łamie wiersze)
pole.setWrapStyleWord(true)
je±li wyrazy nie mieszcz¡ si¦ na ko«cu linii s¡ wówczas prze-
noszone do nowej linii
pole.insert(s,pos)
wstawia napis s na pozycji pos
pole.setFont(czcionka)
ustala parametry czcionki
pole.setTabSize(rozmiar)
ustawia rozmiar tabulacji
pole.setCaretPosition(rozmiar)
ustala pozycj¦ kursora
s=pole.getText()
pobiera tekst z całego pola tekstowego
i=pole.getLineStartOset(n line)
podaje numer znaku stoj¡cego na pocz¡tku linii n line
i=pole.getLineEndOset(n line)
podaje numer znaku stojacego na ko«cu linii n line
Poni»szy program tworzy pole tekstowe wielolinijkowe.
1
import java.awt.*;
2
import javax.swing.*;
3
class tekst_2{
4
public static void main(String[] args){
5
6
JFrame okno=new JFrame();
7
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
8
okno.setVisible(true);
9
10
JPanel p=new JPanel();
11
p.setLayout(new FlowLayout());
12
p.setPreferredSize(new Dimension(200,200));
13
p.setBackground(Color.blue);
14
15
String s="pole tekstowe";
16
Font czcionka=new Font("Dialog", Font.ITALIC+Font.BOLD,10);
17
JTextArea pole=new JTextArea(s,10,10);
18
pole.setEditable(true);
19
pole.setFont(czcionka);
20
21
pole.setLineWrap(true);
22
pole.setWrapStyleWord(true);
23
24
pole.setTabSize(5);
5