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

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í.

 

Reklama

Pokud mě chcete podpořit a jste milovník jedné stopy, navštivte můj projekt: MotoArena.cz

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

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:"));

JTextField

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.

JCheckBox

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.

JComboBox

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.

  • setSelectedIndex: nastaví, který index bude aktivní. Vstupní parametr je číselná hodnota indexu. Indexy jsou číslovány od nuly.
  • getSelectedIndex: vrací vybraný index jako číselnou hodnotu
  • getSelectedItem: vrací hodnotu vybraného prvku.
 
//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.

Události

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

 

 


linkuj topclanky
Komentáře (6)

Autor: Zaachi
Publikováno: 6.1.2008 16:26:57


Mohlo by vás zajímat:
Java a základy GUI
Java a základy GUI #3
Java a základy GUI #4
Java a základy GUI #5 - InternalFrame
TOPLIST.cz
rss coments img img img