SWING Miks Swing Java esimestes versioonides graafikavahendid ainult

  • Slides: 34
Download presentation
SWING

SWING

Miks Swing? • Java esimestes versioonides graafikavahendid ainult AWT (Abstract Window Toolkit) abil •

Miks Swing? • Java esimestes versioonides graafikavahendid ainult AWT (Abstract Window Toolkit) abil • AWT komponendid on sõltuvad platvormist, nt. nupud, … • Vajadus platvormsõltumatute vahendite järgi

Kuidas teeb? • Swing komponente joonistab Java masin • AWT komponente joonistab op. süsteem

Kuidas teeb? • Swing komponente joonistab Java masin • AWT komponente joonistab op. süsteem • Swingi graafikakomponendid algavad tähega J (JFrame, JButton, JLabel, …) • import javax. swing. *; • import java. awt. event. *;

javax. swing. *; • Sisaldab palju J-tähega algavaid klasse, nt. Japplet, JFrame, JDialog •

javax. swing. *; • Sisaldab palju J-tähega algavaid klasse, nt. Japplet, JFrame, JDialog • Laiendavad vastavaid AWT klasse • Uurige milliseid meetodeid ja välju nende kolme näite puhul päritakse

Konteinerklassid • Container – komponentide rühmitamiseks • JFrame – konteiner, mis sisaldab kasutajaliidese teisi

Konteinerklassid • Container – komponentide rühmitamiseks • JFrame – konteiner, mis sisaldab kasutajaliidese teisi komponente • JApplet – Swingi-põhine applet • JPanel – “nähtamatu” konteiner, nt. paigutushalduritega töötamiseks

Abiklassid • Graphics – joonistamiseks vajalik kontekst • Color, Font. Metrics, Dimension, … •

Abiklassid • Graphics – joonistamiseks vajalik kontekst • Color, Font. Metrics, Dimension, … • Layout. Manager – konteineri paigutushaldurid Swing-klasside pärilushierarhia (vaadake paketti javax. swing):

Component (awt) Container (awt) Panel (awt) Applet (applet) JApplet (swing) Window (awt) Dialog (awt)

Component (awt) Container (awt) Panel (awt) Applet (applet) JApplet (swing) Window (awt) Dialog (awt) JDialog (swing) Frame (awt) JFrame (swing) JWindow (swing) Box (swing) Cell. Renderer. Pane (swing) JComponent (swing) Abstract. Button (swing) JMenu. Item (swing) JCheck. Box. Menu. Item (swing) JMenu (swing) JRadio. Button. Menu. Item (swing) JToggle. Button (swing) JCheck. Box (swing) JRadio. Button (swing) JColor. Chooser (swing) JCombo. Box (swing) JFile. Chooser (swing) JInternal. Frame (swing) JLabel (swing)

JLayered. Pane (swing) JDesktop. Pane (swing) JList (swing) JMenu. Bar (swing) JOption. Pane (swing)

JLayered. Pane (swing) JDesktop. Pane (swing) JList (swing) JMenu. Bar (swing) JOption. Pane (swing) JPanel (swing) JPopup. Menu (swing) JProgress. Bar (swing) JRoot. Pane (swing) JScroll. Bar (swing) JScroll. Pane (swing) JSeparator (swing) JSlider (swing) JSplit. Pane (swing) JTabbed. Pane (swing) JTable (swing) JText. Component (swing. text) JEditor. Pane (swing) JText. Area (swing) JText. Field (swing) JPassword. Field (swing) JTool. Bar (swing) JTool. Tip (swing) JTree (swing) JViewport (swing) Box. Filler (swing) <- Component (awt) Button. Group (swing) <- Object (lang)

Rakenduslik pool • Raam ( ingl. frame) - ülemtaseme konteiner, peamiselt teiste Swingkomponentide joonistamiseks.

Rakenduslik pool • Raam ( ingl. frame) - ülemtaseme konteiner, peamiselt teiste Swingkomponentide joonistamiseks. • Paneel (ingl. panel, pane) - vahetaseme konteiner, nuppude ja siltide paigutamiseks. • Nupp (ingl. button) - alamtaseme komponent, kasutajaga suhtlemiseks. • Silt, sedel (ingl. label) - alamtaseme komponent, informatsiooni hoidmiseks. • JText. Field, JTable, …

Mitmekihilised elemendid • JFrame (swing-paketi raam), samuti JDialog, JWindow ning JApplet, ka JInternal. Frame,

Mitmekihilised elemendid • JFrame (swing-paketi raam), samuti JDialog, JWindow ning JApplet, ka JInternal. Frame, sisaldavad vahendeid mitmekihiliseks joonistamiseks • Klassid JLayered. Pane, JDesktop. Pane ning JRoot. Pane kihtidega manipuleerimiseks. • Joonistamiseks on ette nähtud komponendid Canvas (awt), Panel (s. h. Applet ja JApplet) ja JPanel, aga saab kasutada ka teisi Swing-komponente.

public class Swing. Application {. . . public static void main(String[] args) {. .

public class Swing. Application {. . . public static void main(String[] args) {. . . JFrame frame = new JFrame("Swingiproov"); //loome komponendid raami sisse //paneme nad konteinerisse //nimega “contents” frame. get. Content. Pane(). add(contents, Border. Layout. CENTER); //raam valmis, näitame seda. frame. add. Window. Listener(. . . ); frame. pack(); frame. set. Visible(true); } }

Komponentide defineerimine Kood, mis väärtustab nupu: JButton nupp = new JButton(“Olen Swingi nupp!"); nupp.

Komponentide defineerimine Kood, mis väärtustab nupu: JButton nupp = new JButton(“Olen Swingi nupp!"); nupp. set. Mnemonic(Key. Event. VK_I); nupp. add. Action. Listener(. . . ”mingi tegevuse kuular”. . . ); Silt, sedel: . //näiteks mingid muutujad private static String label. Prefix = “Nupu klikkide arv: "; private int num. Clicks = 0; . . . //näiteks selline väärtustamine: final JLabel silt = new JLabel(label. Prefix + "0. . . silt. set. Label. For(button); . . . //näiteks vajutuste loendamiseks: silt. set. Text(label. Prefix + num. Clicks); ");

Üksik nupp ja raam import javax. swing. *; public class My. Frame. With. Components

Üksik nupp ja raam import javax. swing. *; public class My. Frame. With. Components { public static void main(String[] args) { JFrame frame = new JFrame("Adding Components into the Frame"); // Add a button into the frame java. awt. Container container = frame. get. Content. Pane(); // get. Content. Pane() – tagastab sisu, millesse paneme nupu JButton jbt. OK = new JButton("OK"); container. add(jbt. OK); frame. set. Size(400, 300); frame. set. Visible(true); frame. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); } }

import java. awt. *; import javax. swing. *; public class Pildid{ public static void

import java. awt. *; import javax. swing. *; public class Pildid{ public static void main(String argumendid[]){ JLabel silt=new JLabel("Maja silt"); Font suurkiri=new Font("Serif", Font. BOLD+Font. ITALIC, 30); Icon majapilt=new Image. Icon("maja. gif"); // leidke mingi pilt silt. set. Font(suurkiri); silt. set. Icon(majapilt); JButton nupp=new JButton("Maja nupp", majapilt); nupp. set. Tool. Tip. Text("Head vajutamist!"); nupp. set. Mnemonic(java. awt. event. Key. Event. VK_M); //”ALT+M” JFrame f=new JFrame("Sildiraam"); Container p=f. get. Content. Pane(); p. set. Layout(new Grid. Layout(2, 1)); // teatav paigutusviis p. add(silt); p. add(nupp); f. pack(); f. set. Visible(true); } }

Käsitsemissündmused (vt. eelmine loeng) nupp. add. Action. Listener(new Action. Listener() { public void action.

Käsitsemissündmused (vt. eelmine loeng) nupp. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { num. Clicks++; silt. set. Text(label. Prefix + num. Clicks); } }); . . . raam. add. Window. Listener(new Window. Adapter() { public void window. Closing(Window. Event e) { System. exit(0); } });

Nupunäide import javax. swing. *; NB! Enne programmi käivitamist üritage arvata selle käitumist, uurige

Nupunäide import javax. swing. *; NB! Enne programmi käivitamist üritage arvata selle käitumist, uurige API-t public class Test. Button. Icons extends JFrame { public static void main(String[] args) { // Create a frame and set its properties JFrame frame = new Test. Button. Icons(); frame. set. Title("Button. Icons"); frame. set. Size(165, 80); frame. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); frame. set. Visible(true); } public Test. Button. Icons() { Image. Icon us. Icon = new Image. Icon("us. Icon. gif"); Image. Icon ca. Icon = new Image. Icon("ca. Icon. gif"); Image. Icon uk. Icon = new Image. Icon("uk. Icon. gif"); JButton jbt = new JButton("Click it", us. Icon); jbt. set. Pressed. Icon(ca. Icon); jbt. set. Rollover. Icon(uk. Icon); get. Content. Pane(). add(jbt); } }

Komponentide lisamine konteinerisse JPanel pane = new JPanel(); //tühi paneel pane. set. Border(Border. Factory.

Komponentide lisamine konteinerisse JPanel pane = new JPanel(); //tühi paneel pane. set. Border(Border. Factory. create. Empty. Border( 30, 10, 30)); pane. set. Layout(new Grid. Layout(0, 1)); //ühe konkreetse paigutuse määrang pane. add(button); pane. add(label);

Paigutushaldurid Näidete põhjal ja API-t uurides teha kindlaks nende spetsiifika. • • • Aitavad

Paigutushaldurid Näidete põhjal ja API-t uurides teha kindlaks nende spetsiifika. • • • Aitavad konteinereid rühmitada Raami paigutamine konteineris - set. Location(int x, int y) Flow. Layout – Show. Flow. Layout. java Grid. Lay. Out – Show. Grid. Layout. java Border. Layout – Show. Border. Layout. java Konteineril saab olla üks paigutusviis, selle muutmiseks meetodid set. Layout(Uus. Paigutus), validate(), do. Layout()

Isetegemine (html) import javax. swing. *; public class Html. Label{ public static void main(String

Isetegemine (html) import javax. swing. *; public class Html. Label{ public static void main(String argumendid[]){ JFrame f=new JFrame("Kujundatud silt"); JLabel silt=new JLabel( "<html><h 2>Pealkirja</h 2>n"+ "ja <font color=red>punase tekstiga</font> silt</html>" ); f. get. Content. Pane(). add(silt); f. pack(); f. set. Visible(true); } }

Nupule reageerimine • Deklareerida selle nupu sündmused • public class Button. Demo extends JFrame

Nupule reageerimine • Deklareerida selle nupu sündmused • public class Button. Demo extends JFrame implements Action. Listener • Näide: Button. Demo. java

Raamid üksteise sees • Analoogia – Word • Siin JInternal. Frame, JDesktop. Pane. •

Raamid üksteise sees • Analoogia – Word • Siin JInternal. Frame, JDesktop. Pane. • Teated – Internal. Frame. Listener

import javax. swing. *; public class Sise. Raamiga. Raam{ public static void main(String argumendid[])

import javax. swing. *; public class Sise. Raamiga. Raam{ public static void main(String argumendid[]) throws Exception{ JInternal. Frame siseraam 1=new JInternal. Frame("Esimene"); JInternal. Frame siseraam 2=new JInternal. Frame("Teine", true, true); siseraam 2. get. Content. Pane(). add(new JText. Area()); JDesktop. Pane paneel=new JDesktop. Pane(); siseraam 1. set. Size(200, 100); siseraam 1. set. Location(10, 80); siseraam 1. set. Visible(true); paneel. add(siseraam 1); siseraam 1. set. Selected(true); siseraam 2. set. Visible(true); paneel. add(siseraam 2); siseraam 2. set. Size(150, 150); siseraam 2. set. Location(120, 50); JFrame f=new JFrame("Kest"); f. set. Content. Pane(paneel); f. set. Size(300, 300); f. set. Visible(true); }}

Paigutus • JSplit. Pane • Näide: veebibrauserid • Jagamise koht, selle nihutamine

Paigutus • JSplit. Pane • Näide: veebibrauserid • Jagamise koht, selle nihutamine

import javax. swing. *; class Jaotus. Paneel{ public static void main(String argumendid[]){ JSplit. Pane

import javax. swing. *; class Jaotus. Paneel{ public static void main(String argumendid[]){ JSplit. Pane paneel=new JSplit. Pane( JSplit. Pane. VERTICAL_SPLIT, new JButton(“ülemine"), new JToggle. Button("Alumine") ); JFrame f=new JFrame("Jagatud raam"); f. get. Content. Pane(). add(paneel); f. set. Size(200, 200); f. set. Visible(true); } }

import javax. swing. *; class Valiku. Paneel{ public static void main(String argumendid[]){ JPanel p

import javax. swing. *; class Valiku. Paneel{ public static void main(String argumendid[]){ JPanel p 1=new JPanel(new java. awt. Grid. Layout(2, 1)); p 1. add(new JButton(“ülemine")); p 1. add(new JButton("Alumine")); JTabbed. Pane paneel=new JTabbed. Pane(); paneel. add("Esimene", p 1); paneel. add("Teine", new JLabel("Suur silt")); JFrame f=new JFrame("Valikupaneeli näide"); f. get. Content. Pane(). add(paneel); f. set. Size(200, 200); f. set. Visible(true); } }

Paneeli “jaotus” • Klass JSplit. Pane • Splitpanetest. java

Paneeli “jaotus” • Klass JSplit. Pane • Splitpanetest. java

Värvivalija • JColor. Chooser • “värv” = x*”punane” + y*”roheline” + z*”sinine”

Värvivalija • JColor. Chooser • “värv” = x*”punane” + y*”roheline” + z*”sinine”

import javax. swing. *; import javax. swing. event. *; public class Varvi. Valik{ public

import javax. swing. *; import javax. swing. event. *; public class Varvi. Valik{ public static void main(String argumendid[]){ final JText. Area tekstiala=new JText. Area("Värvilised tervitused"); final JColor. Chooser valija=new JColor. Chooser(); // valija. set. Preview. Panel(new JPanel()); valija. get. Selection. Model(). add. Change. Listener( new Change. Listener(){ public void state. Changed(Change. Event e){ tekstiala. set. Foreground(valija. get. Color()); } } ); JFrame f=new JFrame("Värvivalik"); java. awt. Container p=f. get. Content. Pane(); p. add("Center", tekstiala); p. add("South", valija); f. set. Size(300, 500); f. set. Visible(true); } }

Failinime valija • JFile. Chooser • Meetodid show. Open. Dialog, … tavalised failiprotseduurid: lugemine,

Failinime valija • JFile. Chooser • Meetodid show. Open. Dialog, … tavalised failiprotseduurid: lugemine, kirjutamine, …. • Filter, meetodid accept, get. Description (“tingimuslause”).

import javax. swing. *; import java. io. *; public class Faili. Valik{ public static

import javax. swing. *; import java. io. *; public class Faili. Valik{ public static void main(String argumendid[]){ JFile. Chooser valija=new JFile. Chooser(new File(". ")); valija. show. Open. Dialog(new JFrame()); System. out. println("Valiti "+valija. get. Selected. File()); } }

import javax. swing. *; import javax. swing. filechooser. File. Filter; import java. io. *;

import javax. swing. *; import javax. swing. filechooser. File. Filter; import java. io. *; public class Faili. Valik 2{ public static void main(String argumendid[]){ JFile. Chooser valija=new JFile. Chooser(new File(". ")); valija. add. Choosable. Filter(new Pildifilter()); valija. show. Dialog(new JFrame(), "Vali fail"); System. out. println("Valiti "+valija. get. Selected. File()); } } class Pildifilter extends File. Filter{ public boolean accept(File f){ String failinimi=f. get. Name(); if(failinimi. ends. With(“. gif")|failinimi. ends. With(“. jpg")) return true; else return false; } public String get. Description(){ return "Pildifailid "; }}

Tabelid • Klass JTable • JTable table=new JTable(cells, column. Names); JScroll. Pane pane=new JScroll.

Tabelid • Klass JTable • JTable table=new JTable(cells, column. Names); JScroll. Pane pane=new JScroll. Pane(table); • Planet. Table. java

Lisalugemist • http: //java. sun. com/docs/books/tutorial/uiswing/learn/index. html • http: //www. cs. ut. ee/~ahtip/ Tunnid/2001

Lisalugemist • http: //java. sun. com/docs/books/tutorial/uiswing/learn/index. html • http: //www. cs. ut. ee/~ahtip/ Tunnid/2001 -2002 kevad/OOP/TIJ/Chap 13. htm

Veel näiteid (raamatust Y. D. Liang “Introduction to Java”) • • Test. Panels. java

Veel näiteid (raamatust Y. D. Liang “Introduction to Java”) • • Test. Panels. java – komponentide paigutus Draw. Polygon. java – hulknurga joonistus Check. Box. Demo. java – mitmene valik Radio. Button. Demo. java – raadionupud Text. Field. Demo. java – tekstiväli Text. Area. Demo. java – kerimisribaga tekstiala Scroll. Bar. Demo. java – kerimisribad