www.www.zaachi.com » Blog/Java » Java a základy GUI #2

V předchozí části jsme si ukázali základy vytváření GUI v Javě. Vysvětlili jsme si základní pojmy, seznámili jsme se se základními třídami, které budeme implementovat a používat a seznámili jsme se s Layout Managery. Navíc jsme si vytvořili dva základní jednoduché grafické interface, na kterých jsme si ukázali základní použití.
V tomto následujícím díle se zaměříme na rozšíření znalostí ohledně ovládacích prvků, ukážeme si kromě tlačítka JButtonu navíc ještě další grafické prvky a začneme se základy obsluhy událostí.
Pokud jste si vyzkoušeli ukázkový příklad, který jsme udělali v minulém díle na konci, určitě vám vadilo, že se okno vytvořilo v rohu vašeho monitoru. Nejprve se tedy zaměříme na tento problém.
Proto, abychom umístili okno na určité souřadnice, musíme nejprve zjistit, jaké maximální souřadnice můžeme použít. To uděláme jednoduše:
Dimension obrazovka = Toolkit.getDefaultToolkit().getScreenSize();
Vznikla nám proměnná obrazovka, typu Dimension, ve které jsou uloženy maximální souřadnice plochy (obrazovka.width, obrazovka.height ).
Pro nastavení souřadnic nám poslouží funkce setLocation, do které vstupují dva parametry. Jak jinak než souřadnice X, Y.
setLocation(obrazovka.width/4,obrazovka.height/4 );
Pomocí tohoto příkazu umístíme okno do jedné čtvrtiny obrazovky. Do souřadnic se zarovnává levý horní roh okna.
V minulém díle jsme si ukázali pouze základy co se týkalo grafických prvků na stránce. S tlačítkem JButton bychom si vystačili maximálně u opravdu jednoduchého programu. Nyní si ukážeme další grafické prvky, které postupně doplníme do našeho okna.
JLabel vytvoří popisek. V závěru se projevuje jako text, který je umístěný v okně aplikace. Použít jej můžeme jak pro jednoduché oznamování uživateli až po její pravý význam, popis tlačítek. Použití je velice jednoduché, stejně jako u všech ostatních prvků.
Nejprve vytvoříme novou instanci a následně přidáme do containeru. Jeden parametr určuje text, který bude popisek obsahovat:
JLabel popisek = new JLabel("Zadejte text: ");
cont.add(popisek);
Popřípadě můžete použít rovnou zápis:
cont.add( new JLabel("Zadejte text:"));
Textové pole JTextField je jednoduché vstupní pole, které můžeme libovolně umístit do okna aplikace. Nejprve si ukážeme použití:
JTextField input = new JTextField("text...", 20);
cont.add(input);
JTextField má dva vstupní parametry, první značí defaultní hodnotu, kterou bude textové pole obsahovat, druhý parametr je délka pole.
U JTextField se vám budou dále hodit dvě další metody: GetText a SetText. Použití je jistě zřejmé:
//Vytvoříme textové pole
JTextField input = new JTextField("text...", 20);
//umístění do containeru
cont.add(input);
//Nastavení nového textu
input.setText("string");
//Vypsání obsahu textového pole
System.out.println( input.getText() );
Tento příklad nejprve vytvoří textové pole, do kterého posléze vloží text „string“ a nakonec obsah pole vypíše.
Checkbox je klasické zaškrtávací tlačítko:
//Vytvoříme tlačítko typu checkbox
JCheckBox checkbox = new JCheckBox("Tlačítko", true );
//přidáme jej do containeru
cont.add(checkbox);
JCheckBox má dva vstupní parametry. První z nich je popisek tlačítka. Tento popisek se zobrazí za tlačítkem a většinou označuje hodnotu, kterou získáme jeho zatržením. Druhý parametr je hodnota True/False a značí zatržení.
Opět vás zřejmě budou zajímat metody pro zjištění a nastavení hodnoty. Jedná se o metody SetSelected, pomocí níž lze nastavit zatřžení, a metoda GetSelected, pomocí níž zjistíme hodnotu zatřžení:
//odškrtneme tlačítko checkbox.setSelected(false); //a vypíšeme System.out.println( checkbox.isSelected() );
Příklad nejprve nastaví tlačítko na neaktivní a potom vypíše false.
Combobox je klasický rozbalovací select, který obsahuje několik položek (items). Hned zezačátku zmíním alespoň jednu metodu – AddItem, pomocí které můžete přidávat další prvky. Všechno bude patrné z tohoto příkladu:
//vytvoření nového comboBoxu
JComboBox select = new JComboBox();
//přidání do kontejneru
cont.add(select);
//přidání několika Items
select.addItem("prvni");
select.addItem("druha");
select.addItem("treti");
Opět zmíním několik metod, které budou užitečné pro nastavování a zjištění hodnot u ComboBoxu.
//Nastavíme aktivní index na hodnotu 1 select.setSelectedIndex(1); //Vypíčeme hodnotu zaškrtnutého prvku System.out.println( select.getSelectedIndex() ); //Vypíšeme hodnotu vytraného prvku System.out.println( select.getSelectedItem());
Příklad nejprve nastaví jako aktivní druhý prvek (druhý, protože se indexuje od nuly), potom vypíše vybraný index: 1 a nakonec vypíše hodnotu vybraného prvku: druha.
Ovládacích prvků je samozřejmě celá řada a není možné je tady zmínit podrobně všechny. Ovšem použití všech ostatních je obdobné jako ty, které jsme si ukázali.
Pokud máme vytvořený formulář, musíme nějak zařídit abychom jej mohli zpracovávat. Potřebujeme tedy formulář nějakým způsobem odeslat.
V tomto díle si ukážeme pouze základy událostí a pro naše účely budeme potřebovat implementovat třídu ActionListener.
Dále je potřeba doplnit import knihoven:
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
a doplnit metody, definované v Interface. Prázdná třída bude potom vypadat takto:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GUI extends JFrame implements ActionListener{
public GUI() {
}
public void actionPerformed(ActionEvent arg0) {
}
}
Vidíte, že jsme si vytvořili metodu actionPerformed, která je implementována pomocí rozšířeného interface. Tato metoda bude zpracovávat událost po kliknutí na tlačítko, které si vytvoříme.
V ukázce budeme mít textové pole typu JTextField, ve kterém bude text. Vytvoříme si další textové pole typu JTextArea a jedno tlačítko pro odeslání.
Po kliknutí na tlačítko se nám překopíruje text z textového pole do TextArey.
Navíc budeme kontrolovat, zda není text příliš dlouhý, abychom si příklad trochu rozšířili. Nejprve tedy vytvoříme tlačítko:
//Popisek tlačítka
cont.add(new JLabel("Klikni na tlačítko: "));
//Nové tlačítko
JButton submit = new JButton("Přidat text z inputu do textoveho pole");
//přidáme tlačítko do containeru
cont.add(submit);
A nyní to nejdůležitější. Musíme na tlačítko přiřadit, aby se po kliknutí zavolala metoda actionPerformed(). To uděláme velmi jednoduše:
//událost submit.addActionListener(this);
Abychom mohli přistupovat k textovému poli a TextArey v jiné metodě, je nutné vytvořit tyto proměnné jako globální, nebo je popřípadě předávat metodě.
Nyní už stačí pouze dopsat metodu pro zpracování:
public void actionPerformed(ActionEvent arg0) {
if (this.input.getText().length() > 50) {
JOptionPane.showMessageDialog(null, "Text je příliš dlouhý ",
"Error", JOptionPane.ERROR_MESSAGE);
} else
this.area
.setText(this.area.getText() + this.input.getText() + "n");
}
Pokud jste vše udělali stejně jako já, měl by vám vzniknout funkční formulář podobný tomuto:
Nakonec si ukážeme celý zdrojový kód:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GUI extends JFrame implements ActionListener{
public JTextField input;
public JTextArea area;
public GUI() {
super("Window title");
setSize(400, 400);
Dimension obrazovka = Toolkit.getDefaultToolkit().getScreenSize();
setLocation(obrazovka.width/4,obrazovka.height/4 );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
Container cont = new Container();
cont = getContentPane();
FlowLayout layout = new FlowLayout();
cont.setLayout(layout);
//nastavíme pozadí containeru
cont.setBackground(Color.white);
//přidáme popisek
cont.add( new JLabel("Zadejte text:"));
//Vytvoříme textové pole
input = new JTextField("text...", 20);
//umístění do containeru
cont.add(input);
//Nastavení nového textu
input.setText("string");
//Vypsání obsahu textového pole
System.out.println( input.getText() );
//Popisek tlačítka
cont.add(new JLabel("Klikni na tlačítko: "));
//Nové tlačítko
JButton submit = new JButton("Přidat text z inputu do textoveho pole");
//přidáme tlačítko do containeru
cont.add(submit);
//událost
submit.addActionListener(this);
//Textarea
area = new JTextArea();
cont.add(area);
setContentPane(cont);
}
public void actionPerformed(ActionEvent arg0) {
//pokud je v textovém poli text, delší než 50 znaků, vypíše se chybové hlášení
if (this.input.getText().length() > 50) {
JOptionPane.showMessageDialog(null, "Text je příliš dlouhý ",
"Error", JOptionPane.ERROR_MESSAGE);
} else
// v opačném případě se do textarey zapíše text z textového pole
this.area.setText(this.area.getText() + this.input.getText() + "n");
}
}
Mohlo by vás zajímat:
Java a základy GUI#1
Java a základy GUI#3
Java a základy GUI#4

Autor: Zaachi
Publikováno: 6.1.2008 16:26:57
Java a základy GUI
Java a základy GUI #3
Java a základy GUI #4
Java a základy GUI #5 - InternalFrame