GUI - úvod

Transkript

GUI - úvod
GUI - úvod
V této kapitole si ukážeme návod, jak vytvořit jednoduchou grafickou aplikaci a umístit
do ní některé další grafické prvky.
Klíčové pojmy:
Grafické uživatelské rozhraní, grafické komponenty, fokus, look and feel, skinovatelný, správce
uspořádání .
GUI - Graphic User Interface - grafické uživatelské rozhraní
•
nezávislé na zařízení, můžeme používat řadu vizuálních komponent:
◦ formuláře
◦ tlačítka
◦ přepínače
◦ dialogy
◦ grafické komponenty
◦ multimediální komponenty
◦ tiskové komponenty
Typy grafických rozhraní v Javě
• AWT (Abstract Windows Toolkit) jsou starší
◦ používá se jen výjimečně (applety)
◦ nevýhodou značná náročnost na hardware a nepříliš pěkný vzhled
◦ výhodou podpora prakticky všech browserů
◦ AWT rozhraní je vláknově zabezpečené
◦ Aplikace přejímala vzhled OS, na kterém běžela.
• nahrazeno rozhraním JFC (Java Foundation Classes) obsahujícím vizuální i
nevizuální komponenty
◦ nevizuální komponenty nazýváme Java Beans (kávové boby)
◦ vizuální komponenty: grafické rozhraní Swing
• Swing je bohatší na komponenty, vychází však z AWT
◦ využívá stejné události, je postaven na podobných komponentách, práce s oběma
rozhraními je více-méně analogická
◦ rozhraní Swing je rychlejší
◦ nevýhodou je fakt, že ho neumí zobrazit korektně všechny browsery, je vláknově
nezabezpečené
• názvy tříd. Názvy tříd v knihovně AWT představující komponenty (Button, Table,
Frame, ...) se liší od názvů tříd v rozhraní Swing a to přidáním písmene J (JButton,
JTable, JFrame,...)
• informace o rozhraní Swing lze nalézt na stránkách společnosti Sun:
http://java.sun.com/docs/books/tutorial/uiswing/index.html
2010-11-11
GUI - úvod
1/8
Postup při vytváření GUI aplikace
• navržení a vytvoření grafické rozhraní tvořeného jednotlivými komponentami
• zajištění možnosti ukončení programu
• definice události, které mají být v programu obslouženy, a zápis kódu pro jejich
obsluhu formou handleru
• návrh grafického rozhraní by měl být vždy oddělen od výkonné části programu
Rozdělení komponent
Skupiny komponent mají hierarchickou strukturu
Top-level komponenty
• komponenty, na které mohou být umisťovány jiné komponenty (tj. komponenty
podkladové)
• nebo na ně naopak již žádnou další komponentu umístit nelze
• tyto komponenty jsou v hierarchii na nejvyšším stupni
• každá aplikace musí obsahovat alespoň jednu top-level komponentu
• mezi nejčastěji používané top-level komponenty patří:
◦ JFrame (formulář)
◦
JDialog
Kontejnerové komponenty
• v aplikacích často používány
• na nižší hierarchické úrovni než top-level komponenty
• slouží k seskupování komponent, mohou na ně být umisťovány jiné komponenty
• kontejnerové komponenty bývají umístěny na top-level komponentách
• do této skupiny patří:
◦ Panel
◦ ScrollPane (panel s posuvníky pro
◦ TabbedPane (panel se záložkami)
◦ Toolbar (panel nástrojů)
zobrazování obrázků)
Základní komponenty
• slouží pro zajištění komunikace mezi uživatelem a aplikací
• vyskytují se prakticky v každé aplikaci
• do této skupiny patří:
◦ JButton (tlačítko)
◦ JCheckBox (zaškrtávací pole)
◦ JRadioButton (přepínací tlačítko)
◦ JComboBox (rozbalovací seznam)
◦ JList (seznam)
◦ JMenu (menu)
◦ JTextField (textové pole)
2010-11-11
GUI - úvod
2/8
◦ SJpinner (zadávání číselných údajů)
Needitovatelné informační komponenty
• jedná se informační komponenty, jejichž obsah nemůže být uživatelem měněn
• do této skupiny lze zařadit:
◦ JLabel (popis)
◦ JProgressBar (zobrazení průběhu běžícího procesu).
Interaktivní komponenty
• komponenty představované standardními dialogy
• umožňující provádět často opakované činnosti:
◦ výběr souboru
◦ výběr barvy
◦ hledání souboru, ...
◦ popř. zobrazují výsledky ve formátovaném tvaru (tabulky)
• do této skupiny patří:
◦ JFileChooser (výběr souboru),
◦ JColorChooser (výběr barvy)
◦ JTree (Strom)
◦ JTable (Tabulka)
Formuláře – JFrame
• v praxi je vhodné pracovat se třídou odvozenou od třídy JFrame, ve které můžeme s
jednotlivými komponentami a jejich parametry efektivněji manipulovat
• tento postup umožňuje oddělit od sebe grafické a aplikační rozhraní aplikace, v praxi
je velmi často používán
• nejprve se pokusíme vytvořit formulář a zobrazit ho na obrazovce pomocí třídy Okno
Příklad 1: Vytvoření jednoduchého okna:
import javax.swing.*;
public class Okno extends JFrame{
public Okno() {}
}
• ve třídě Main vytvoříme instanci třídy Okno
public class Main {
public static void main (String[] args)
Okno o = new Okno();
o.setVisible(true);
}
}
{
• volání metody o.setVisible(true) se postará o zviditelnění okna
2010-11-11
GUI - úvod
3/8
•
z takto vzniklého okna bude vidět pouze jeho titulek, musíme nastavit jeho rozměry
• formuláři nastavíme jeho šířku a výšku prostřednictvím metody:
◦ setDimension(int width, int height) nebo
◦ setSize(int width, int height)
• hodnoty jsou uváděny v pixelech
• prostřednictvím metody setTitle(String title) zadáme titulek.
• můžeme nastavit přímo v konstruktoru Okna:
Příklad 2: Nastavení parametrů okna:
import javax.swing.*;
public class Okno extends JFrame{
public Okno() {
this.setSize(640, 480);
this.setTitle("Moje okno");
this.setVisible(true);
}
}
• okno však při vypnutí prostřednictvím křížku zmizí, aplikace však běží dále
• do programu musíme začlenit kód zajišťující ukončení programu při zavření okna
• slouží k tomu metoda setDefaultCloseOperation(int o), která by měla být volána
ihned po vytvoření instance
• oknu dále nastavíme metodou setLocation(int x. int y) polohu jeho levého
horního rohu:
Příklad 3: Dokážeme zavřením okna zastavit běh programu:
import javax.swing.*;
public class Okno extends JFrame{
public Okno() {
this.setSize(640, 480);
this.setTitle("Moje okno");
this.setLocation(100,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
Vlastnosti komponent
• pro získání vlastností komponent či jejich nastavování používáme metody zvané
gettery a settery:
◦ Size
◦ Title
◦ Name
◦ Font
◦ Visible
◦ Location...
• vzniknou tak metody
2010-11-11
GUI - úvod
4/8
◦ getSize(), getTitle(), getName(), getFont(), getLocation() ...
◦ setSize(400,500), setTitle("Moje okno"), setName("Jméno"), setFont(...),
setLocation(100,100)
• veškerá nastavení je nutné provést před tím, než bude okno zobrazeno
• fokus = zaměření komponenty
• v každém okamžiku je jedna z komponent nacházejících se na formuláři aktivní,
říkáme o ní, že je zaměřená (tj.má fokus)
• tento stav se projeví grafickým zvýrazněním komponenty
• zaměřená komponenta může reagovat i na vstup z klávesnice (např. klávesové
zkratky).
Nastavení vzhledu komponent
• každému formuláři ale i ostatním komponentám umístěným na něm můžeme
nastavit různý vzhled, tzv. look and feel
• komponenty v Javě jsou tedy skinovatelné
◦ existuje velké množství různých skinů, které jsou volně dostupné na Internetu,
velikosti, tvary, barvy jednotlivých komponent mohou být různé
◦ pro správu vzhledů používáme statickou třídu UIManager, kterou je nutno
importovat: import javax.swing.UIManager;
◦ nejčastěji používanou metodou je metoda setLookAndFeel(), které umožňují
nastavit vzhled aplikace
◦ kód je obalen v sekvenci try-catch, jedná se o synchronní výjimku
• k dispozici jsou dvě základní varianty:
◦ getCrossPlatformLookAndFeelClassName(): aplikace bude mít stejný vzhled
nezávisle na operačním systému, na kterém běží, jedná se o výchozí variantu
◦ getSystemLookAndFeelClassName(): aplikace bude mít vzhled obvyklý v daném
operačním systému. Na platformě Windows WindowsLookAndFeel a na
platformě Linux/Unix MotifLookAndFeel. Ve většině případů je vhodnější použít
tuto variantu.
• Nastavení look and feel metodou setLookAndFeel musí být provedeno před
zobrazením formuláře
• další podrobnosti o možnostech nastavování vzhledu komponent lze nalézt
v dokumentaci:
http://java.sun.com/docs/books/tutorial/uiswing/lookandfeel/plaf.html
Příklad 4: Nastavení vzhledu okna:
import javax.swing.UIManager;
public static void main (String [] args) {
try {
UIManager.setLookAndFeel(UIManager.
getSystemLookAndFeelClassName());
}
2010-11-11
GUI - úvod
5/8
catch (Exception e) {
e.printStackTrace();
}
new Okno();
}
Ikona programu
• na formuláři je možno zobrazit i ikonu programu představovanou obrázkem v
některém z formátů: JPG, GIF, PNG
• lze si tak vytvářet i ikony vlastní
• standardní velikost ikony je 16x16 pixelů
• k těmto operacím slouží třída ImageIcon
• v konstruktoru instance třídy zadáme cestu k obrázku
• metodou setIconImage(Image i) ho nastavíme jako ikonu
ImageIcon i = ew ImageIcon("C:\\Tomas\\ikona.png");
this.setIconImage(i.getImage()
Přidávání dalších komponent na formulář
• každá top-level komponenta má zvláštní kontejner zvaný ContentPane obsahující
všechny grafické komponenty ležící na top level komponentě
• tvoří ho pouze část komponenty, pouze vnitřní část formuláře bez titulkového pruhu
a menu
• obsah content pane je dostupný prostřednictvím metody getContentPane()
• do kontejneru content pane můžeme další komponenty přidávat metodou add()
• grafické komponenty jsou na top-level komponenty přidávány hierarchicky, vytvářejí
stromovou strukturu
• kořen stromu vytváří top-level komponenta
• grafické komponenty používají vlastní souřadný systém, jeho počátek je v levém horním
rohu okna, osa y směřuje dolů, osa x vpravo
• hodnoty souřadnic jsou zadávány v pixelech
• velikost souřadnice x je dána hodnotou šířky komponenty, můžeme ji zjistit metodou
getWidth()
•
velikost souřadnice je dána výškou komponenty, můžeme ji zjistit metodou
getHeight()
•
pokud chceme používat češtinu a chceme ji mít správně, ukládáme s kódováním
UTF-8 a překládáme s přepínačem -encoding UTF-8
Layout managery
• správci uspořádání
2010-11-11
GUI - úvod
6/8
• na různých platformách jsou velikosti grafických komponent různé, layout managery
zajistí, že při přechodu mezi platformami budou velikosti a poloha jednotlivých
komponent automaticky přepočteny a aplikace bude vypadat neustále hezky :-)
•
•
•
v Javě se s layout managery pracuje prostřednictvím tříd. Pro nastavení uspořádání
komponent používáme příkaz
setLayout(LayoutManager manager).
pro práci s layout managerem je nutno importovat balík java.awt.*
na formulář přidáme komponentu, tlačítko JButton a to nejprve bez využití layout manageru.
JButton but=new JButton("AHOJ");
•
•
metodou getContnentPane() lze získat kontejner představující plochu okna
tlačítko přidáme metodou add(Component c) : o.getContentPane.add(but);
Příklad 5: Přidání tlačítka do obsahu okna:
import javax.swing.*;
import java.awt.*;
public class Okno extends JFrame{
public Okno() {
this.setSize(640, 480);
this.setTitle("Moje okno");
this.setLocation(100,100);
Container obsah = this.getContentPane();
JButton but = new JButton("AHOJ");
obsah.add(but);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
• tlačítko bude zabírat celou plochu okna, proto postup zopakujeme s využitím layout
manageru
• vytvoříme novou proměnou typu FlowLayout obsahující odkaz na instanci správce
rozložení komponent:
FlowLayout f=new FlowLayout();
• metodou setLayout(LayoutManager lm) nastavíme pro zvolenou komponentu
správce rozložení
• oba kroky lze spojit do jednoho: this.setLayout(new FlowLayout());
• přeložíme-li a spustíme vytvořený program, velikost tlačítka již bude normální
• vytvoříme více tlačítek, která pojmenujeme
• tlačítka jsou v každé řadě vycentrovány vzhledem ke komponentě, na které leží
• celý obsah konstruktoru ještě můžeme rozdělit do tří metod:
◦ inicilizaceOkna()
◦ obsahOkna()
◦ zviditelněniOkna()
2010-11-11
GUI - úvod
7/8
Příklad 6: Použití správce uspořádání a rozdělení konstruktoru do 3 metod:
import javax.swing.*;
import java.awt.*;
public class Okno extends JFrame{
Container obsah;
JButton but1, but2;
JLabel lab;
JTextField text;
public Okno() {
inicializaceOkna();
obsahOkna();
zviditelneniOkna();
}
public void inicializaceOkna() {
this.setSize(300, 200);
this.setTitle("Moje první okno");
this.setLocation(100,100);
this.setLayout(new FlowLayout());
obsah = this.getContentPane();
}
public void obsahOkna() {
but1 = new JButton("ahoj");
but2 = new JButton("nazdar");
lab = new JLabel("tady se to změní");
obsah.add(but1);
obsah.add(lab);
obsah.add(but2);
public void zviditelneniOkna() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
2010-11-11
GUI - úvod
8/8

Podobné dokumenty

8. Grafické uživatelské rozhraní

8. Grafické uživatelské rozhraní Ošetření ostatních události, které vznikají u okna (tzv. WindowEvent) nepřekrýváme – tj. bude se používat standardní ošetření nadefinované v předkovi. Všimněte si, že třída Wl je nadefinována uvnit...

Více

Processing 3.0 a p5.js

Processing 3.0 a p5.js import processing.core.*; public class ProcessingSketch extends PApplet { public static void main (String args[]) { PApplet.main(new String[] { "--present", "processing.ProcessingSketch" });

Více

import java.awt.

import java.awt. Zobrazení popisku, bez generování události • JPasswordField Zobrazení hesla, místo vložených znaků se zobrazí hvězdičky • JRadioButton Přepínač, množina tlačítek, jen jedno lze zvolit, událost po u...

Více

NetVision - SoftLink

NetVision - SoftLink  pevný disk 80 GByte a více, podle ukládaných dat  ethernet rozhraní 100 Mbit/sec.

Více

Java FAQ velmi rozsáhlý soubor otázek a odpovědí

Java FAQ velmi rozsáhlý soubor otázek a odpovědí Stažení provádí prohlížeč na popud getImage(..) třídy java.applet.Applet. I#424 Jak se vykreslí obrázek pomocí objektu Graphics ? g.drawImage(image, x, y) nebo g.drawImage(image, x, y, w, h). Param...

Více

F***************** JAQ Java Asked Questions v. 2.3 ***** pro Java 7

F***************** JAQ Java Asked Questions v. 2.3 ***** pro Java 7 g.drawImage(image, x, y) nebo g.drawImage(image, x, y, w, h). Parametry w, h umožňují transformaci na šířku a výšku. I#425 Co je ikona a jak čím se vytvoří z obrázku ? Ikona je dekorace - "obtisk d...

Více