Swing. (A javax.swing csomag)

Hasonló dokumentumok
Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

Programozási technológia

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

Szoftvertechnológia alapjai Java előadások

Java felhasználói felület

Java Programozás 3. Gy: Java GUI. Swing, AWT

Grafikus felületek a programozó szempontjából grafikus elemek absztrakt reprezentációja az egyes elemek tulajdonságait leíró adatstruktúrák.

Java Programozás 11. Ea: MVC modell

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Java felhasználói felület

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Programozás III GRAFIKA RAJZOLÁS SWING FELÜLETEN RAJZOLÁS GRAFIKA HASZNÁLATA. Rajzolni az awt csomag Graphics osztályának metódusaival tudunk.

Programozási technológia

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

JAVA PROGRAMOZÁS 5.ELŐADÁS

Java Programozás 5. Gy: Java alapok. Adatkezelő 1.rész

Swing GUI készítése NetBeans IDE segítségével

Java Programozás 7. Gy: Java alapok. Adatkezelő 3.rész

Java programozási nyelv 5. rész Osztályok III.

Java és web programozás

Programozási nyelvek Java

JAVA PROGRAMOZÁS 4.ELŐADÁS

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

Eseménykezelés Java környezetben, AWT alapok

Grafikus felületek készítése 1.

OOP: Java 8.Gy: Abstract osztályok, interfészek

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java programozási nyelv 8. rész Grafikus felhasználói felület

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - II. / 1

Abstract osztályok és interface-ek. 7-dik gyakorlat

Segédanyag: Java alkalmazások gyakorlat

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Java és web programozás

Java felhasználói felület

Concurrency in Swing

BME MOGI Gépészeti informatika 4.

ZH mintapélda. Feladat. Felület

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

VI. Grafikus Java alkalmazások

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

OOP: Java 8.Gy: Gyakorlás

BME MOGI Gépészeti informatika 8.

Java Programozás 8. Ea: GUI. Graphical User Interface

JAVA SE/ME tanfolyam tematika

Tartalomjegyzék. Bevezetés...2

A feladatok megoldásához felhasználandó osztályok leírásait az alábbi URL-en találja meg:

Segédanyag: Java alkalmazások gyakorlat

Java programozási nyelv

Sikeres végrehajtás(pass): ez azt jelenti, hogy a teszt rendben lefutott, és az ellenőrzési feltételek mind teljesültek.

Access adatbázis elérése OLE DB-n keresztül

JNDI - alapok. Java Naming and Directory Interface

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Collections. Összetett adatstruktúrák

VII. Appletek, grafika

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

és az instanceof operátor

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

libgdx alapok, első alkalmazás

Alkalmazásfejlesztési technológia. Vizsgakövetelmények. 1. Megjelenítési technikák. Magasabb szintű komponensek. Feladat - RendererTeszt

Bánsághi Anna

Java programozási nyelv 7. rész Java osztálykönyvtár 1.

7. K: JAVA alapok Konzultáció

Java Programozás 2. Gy: EmpProgram. Grafikus felületű adatkezelő program

Szoftvertechnológia alapjai Java előadások

Végrehajtási szálak - kiegészítések. Szinkronizálás, érvénytelenített metódusok helyettesítése

Stateless Session Bean

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Web-fejlesztés NGM_IN002_1

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Programozási technológia

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Objektumorientált programozás C# nyelven III.

Algoritmusok és adatszerkezetek II.

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Programozási nyelvek Java

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

ANDROID ALKALMAZÁSFEJLESZTÉS

A Java nyelv. VI. Adatbázis-kezelés Javaban, Példaprogram Az elôzô részben láthattuk, hogy a Java ideális programozási nyelv perszisztens objektumok

Java IX. telkezelés a Java-ban

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java programozási nyelv 6. rész Java a gyakorlatban

Ajax és Echo 2. Bokor Attila

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

Java IX. telkezelés a Java-ban

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Átírás:

Swing (A javax.swing csomag)

SWING komponensek Motiváció: az AWT hátrányai: a toolkit-ek komplexitása (bug-ok forrása volt, sérti a platformfüggetlenséget), kevés lehetőség a megjelenítés befolyásolására, speciális megjelenítésű komponensek létrehozására (a megjelenítés a platformnak megfelelő), stb. JavaSoft megoldás: SWING: 100%-ban Java-ban megírt grafikus komponensek

Tartalom panel JFrame: a Frame kiterjesztése NEM adhatunk hozzá direkt módon komponenseket Tartozik hozzá egy Content Panel (Container típus), ehhez adjuk hozzá a komponenseinket: Container contentpane = this.getcontentpane(); contentpane.setlayout( new FlowLayout()); contentpane.add(button1); contentpane.add(button2); contentpane.add(panel); Vagy: JPanel panel = new JPanel(); panel.setlayout( new FlowLayout()); panel.add(textfield); panel.add(list); this.setcontentpane(panel);

Look and feel A komponensek megjelenítése már nem platformfüggő, az UIManager osztály segítségével befolyásolhatjuk a felszínünk grafikus megjelenítését, különböző look and feel osztályokat rendelhetünk hozzá: try { UIManager.setLookAndFeel( "javax.swing.plaf.metal.metallookandfeel"); catch (Exception e) { System.err.println("Couldn't use the metal look and feel: " + e);

SWING komponensek (néhány példa) JLabel: az awt.label SWING-es megfelelője, ikont is rendelhetünk hozzá, lehetővé teszi a tartalom pozicionálását. Megjegyzés: a SWING címkék esetében html formázás is alkalmazható JButton: az awt.button SWING-es megfelelője, ikon rendelhető hozzá JTextComponent: Hasznos metódusok: copy(), cut(), paste(), getselectedtext(), setselectionstart(), setselectionend(), selectall(), replaceselection(), gettext(), settext(), seteditable(), setcaretposition() Származtatott osztályok: JTextField, JTextArea, JTextPane. Továbbá a JTextField leszármazottja: JPasswordField (kódok beolvasására) JScrollBar: az awt.scrollbar SWING-es megfelelője JSlider: a JScrollBar-hoz hasonló, plusz funkciókkal JProgressBar: folyamatok, műveletsorok állapotának monitorizálására JComboBox: az awt.choice komponenshez hasonló, lehetővé teszi egy szerkeszthető mező hozzáadását JList: az awt.list megfelelője Más eszközök (nem grafikus komponensek): pl. Timer (bizonyos időintervallum eltelte után ActionEvent-et genrál), stb. Stb., stb., lásd pl. http://java.sun.com/developer/onlinetraining/gui/swing1/shortcourse.html

Az Icon interfész public interface Icon{ void painticon( Component c, Graphics g, int x, int y ); int geticonwidth(); int geticonheight(); Használata: public class RedOval implements Icon { public void painticon (Component c, Graphics g, int x, int y) { g.setcolor(color.red); g.drawoval (x, y, geticonwidth(), geticonheight()); public int geticonwidth() { return 10; public int geticonheight() { return 10; Vagy: Icon iconpicture = new ImageIcon("Apple.gif");

Példa - JLabel import javax.swing.*; import java.awt.*; public class SwingPanel extends JPanel{ public SwingPanel() { setlayout( new GridLayout( 3, 1 )); JLabel simplelabel = new JLabel("This is a simple label"); add( simplelabel ); JLabel iconlabel = new JLabel("This is a fancy label"); Icon icon = new ImageIcon("icon.gif"); iconlabel.seticon( icon ); Font font = new Font("Serif",Font.BOLD Font.ITALIC,30); iconlabel.setfont( font ); add( iconlabel ); JLabel myiconlabel = new JLabel("This is my icon label"); Icon myicon = new RedOval(); myiconlabel.seticon( myicon ); add( myiconlabel );

Példa - JLabel import javax.swing.jframe; public class SwingFrame extends JFrame{ private SwingPanel p; public SwingFrame() { p = new SwingPanel(); getcontentpane().add( p ); public static void main( String args[] ) { SwingFrame f = new SwingFrame(); f.addwindowlistener( new java.awt.event.windowadapter(){ public void windowclosing( java.awt.event.windowevent e){ System.exit( 0 ); ); f.setbounds(1,1,400,300); f.setvisible( true );

Nehézsúlyú és pehelysúlyú komponensek Az AWT heavyweight komponenseket használ (mindeniknek megfelel egy natív peer), a SWING lightweight komponenseket (nincs natív párjuk) A Swing komponensek egy natív konténeren belül lesznek megjelenítve, az AWT komponensek mindegyikének megfelel egy natív ablak Z- ordering problémák (a SWING komponensek öröklik az őket tartalmazó tároló szintjét, így az AWT komponensek elfedik őket) egy alkalmazáson (tárolón) belül nem javasolt a különböző típusú komponensek keverése (megjegyzés: vonatkozó Java SE 6 javítások) A lightweight komponensek tartalmazhatnak átlátszó részeket (a felület nem lesz feltétlenül kitöltve háttérszínű pixelekkel a komponensek nem feltétlenül téglalap alakúak, az egérműveletek továbbítódhatnak az őket tartalmazó tárolókhoz)

Paint: AWT vs. SWING AWT: A (natív) rendszer által kiváltott (system triggered) frissítés: mikor először jelenik meg a komponens, mikor újraméreteződik, mikor sérül és frissíteni kell paint metódus meghívása (a teljes érintett felület újrarajzolódik) Az alkalmazás által kiváltott (application triggered) frissítés: az alkalmazás kéri a komponens frissítését (valamilyen állapotváltozás következményeként) a repaint metódus meghívása az update, majd a paint meghívását eredményezi (az update alap implementációja törli a komponens felületét, de újradefiniálható incremental painting) SWING: A Containerek frissítése először saját felületük, majd az általuk tartalmazott komponensek felületének frissítését eredményezi a paint metódus újradefiniálásánál fontos a super.paint() metódushívás alkalmazása (ellenkező esetben a tartalmazott komponensek nem jelennek meg, mivel a Container.update() alap implementációja nem biztosít rekurzív update és paint metódushívásokat a tartalmazott komponensekre) A system triggered frissítést nem csak a natív rendszer (első megjelenés), hanem a lightweight framework is kiválthatja (későbbi frissítés), és ez repaint metódushíváson keresztül történik a SWING esetében nincsen igazi különbség az update/paint között

Paint: SWING Double buffering támogatás: offscreen buffer hozzárendelése a tárolókhoz public boolean isdoublebuffered() alapértelmezetten true Transparency és overlapping: a komponensek felületén nincs minden pixel kirajzolva, és a komponensek részlegesen fedhetik egymást a frissítésnél a komponens alatti, illetve az egymást fedő részeket is frissíteni kell (a hierarchia bejárása) A frissítés optimalizálására: public boolean isoptimizeddrawingenabled() true, ha a komponens biztosítja, hogy nem tartalmaz egymást fedő komponenseket (nincs szükség a hierarchia bejárására) Opacity: - public boolean isopaque() True a komponensnek megfelelő téglalap alakú felület minden pixele meg lesz jelenítve (a legtöbb esetben) False a komponens nem garantálja minden pixel megjelenítését Nem átlátszóságot jelent, tulajdonképpen csak egy szerződés a grafikus frissítést végző rendszerrel, de a komponensek maguk kell biztosítsák a megfelelő implementációt Paint metódusok: protected void paintcomponent(graphics g) protected void paintborder(graphics g) protected void paintchildren(graphics g) általában csak a paintcomponent metódust akarjuk újradefiniálni (és akkor csak ezt tegyük!)