Java-concept och Swing. Swing low, sweet chariot

Relevanta dokument
Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

Mer om grafiska komponenter. Händelsestyrda program

SMD091 Lektion 9. Definition. Inkapsling. Lite repetition. Grafik. Gränssnitt Definition och Implementation. Sammansättning... Implementation.

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

OOP Objekt-orienterad programmering

MVC-mönstret. model-view-control i Swing

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

OOP Objekt-orienterad programmering

27. GUI Programming. Java. Summer 2008 Instructor: Dr. Masoud Yaghini

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Malmö högskola 2007/2008 Teknik och samhälle

Föreläsning 3: Händelsestyrda program och användargränssnitt

Föreläsning 13: Swing (GUI), händelser, timer

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers. Exempel: FlowLayout. Klassen FlowLayout

Projekt 2 XL. Observer-mönstret

Lösningar för tenta 3 DAT043,

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Grafiska användargränsnitt i Java. Föreläsning 7 Innehåll. Använda klasspaketet Swing. Klasspaket i Java. Grafiska användargränsnitt i Java

Laboration 15 Grafiskt användargränssnitt

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

1 Grafiska komponenter

Lektion Händelsehanterare

2I1073 Lektion 2. Lektion 2a. Lektion 2a. Servlets, säkerhet, och filhantering. import java.io.*; import javax.servlet.*; import javax.servlet.http.

Grafiska komponenter.

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Efterhand fick vi ett system som vi tyckte var väl anpassat. Vi renskrev kladden (nedan) och började programmera menyerna.

LiTHehack? Här? lithehack se koma Tisdagar och torsdagar

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Grafiskt användargränssnitt (GUI-Graphical User Interface) intro Komponenter

Laboration 24 Databasen MySQL och java

ID1004 Laboration 3, 5-6 November 2012

Arv och Grafiska Användargränssnitt

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

Objektorienterad Programmering DAT043. Föreläsning 6 30/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Lösningsförslag till tentamen

kl

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Objektorienterad programmering med Java Swing. Programexempel. Swing och AWT AWT. = Abstract windowing toolkit

Grafiska användargränssnitt i Java

Tentamen FYTA11 Javaprogrammering

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Rita Egna Bilder, Timer

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna.

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Arv, Grafiska användaregränssnitt och Inre klasser! Förelasning 12!! TDA540 Objektorienterad Programmering!

Lösningsförslag till tentamen

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

Lab5 för prgmedcl04 Grafik

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Grafiska användargränssnitt i Java

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. Exempel på några av komponenterna. LayoutManagers.

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Lösningsförslag till tentamen

Labbinstruktioner för Java/Swing

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

ITK:P1 Föreläsning 8. Verktyget Javadoc. Kommentarer för Javadoc. Multimedia för spelkonstruktion

Lösningsförslag tentamen FYTA11 Java

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h

Grafiska användargränssitt och händelsehantering

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

LYCKA TILL!!! TENTAMEN I Programmeringsteknik F1. Var vänlig och läs detta: CTH TIN 211. DATAVETENSKAP Göteborg ( ) TENTAMEN

lgammal2.txt // Lösningar till gammal tentamen // Uppgift 1 a

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 00 - juni - 17 Tentamen i Objektorientering och Java Skrivtid 5 h

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Grafiska användargränssnitt i Java

Lösningsförslag till tentamen

5 Användargränssnitt. 5.1 AWT och Swing

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? Exempel på några av komponenterna. LayoutManagers.

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Lösningar till tentamen i EDAF25

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Föreläsning 10. ADT:er och datastrukturer

Properties. Användbara metoder som kan anropas i propertychanged:

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Tentamen FYTA11 Javaprogrammering

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Grafiska användargränssnitt i Java

För att hitta filen gå till mappen NetBeansProjects. Välj undermappen med rätt projekt, och sedan undermapp dist. Där ligger.jar-filen.

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Transkript:

Java-concept och Swing Swing low, sweet chariot

Javas Swing-API En del av Javas standard-api API - application programming interface Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer Bygger på det äldre AWT (en del klasser ligger fortfarande i java.awt-paketet.

En massa paket De mest centrala paketen är javax.swing och java.awt Vad var paket? En katalog med klasser/interface som hör ihop

What makes it Swing? I AWT/Swing finns containers (behållare) och components (komponenter). Containers är (genom arv) också komponenter Olika LayoutManagers hanterar placering av komponenter.

AWT är grunden I java.awt: Component <- Container <- Window <- Frame I Swing: java.awt.container <- javax.swing.jcomponent java.awt.frame <- javax.swing.jframe <- javax.swing.jdialog

Swing-komponenter är containers En JFrame är ett fönster. I en JFrame kan man lägga komponenter, t ex en JMenuBar. I en JMenuBar kan man lägga en (eller flera) JMenu och i en JMenu kan man lägga flera JMenuItem.

JFrame - Huvudfönstret import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SimpleFrame { private static void createandshowgui() { } } JFrame frame = new JFrame("Simple Frame"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setpreferredsize(new Dimension(480,200)); frame.pack(); frame.setvisible(true); public static void main(string[] args){ } createandshowgui();

Konstruktor - String med titel import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SimpleFrame { private static void createandshowgui() { } } JFrame frame = new JFrame("Simple Frame"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setpreferredsize(new Dimension(480,200)); frame.pack(); frame.setvisible(true); public static void main(string[] args){ } createandshowgui();

Stäng fönstret med x-knappen import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SimpleFrame { private static void createandshowgui() { } } JFrame frame = new JFrame("Simple Frame"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setpreferredsize(new Dimension(480,200)); frame.pack(); frame.setvisible(true); public static void main(string[] args){ } createandshowgui();

Fönstret har en storlek import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SimpleFrame { private static void createandshowgui() { } } JFrame frame = new JFrame("Simple Frame"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setpreferredsize(new Dimension(480,200)); frame.pack(); frame.setvisible(true); public static void main(string[] args){ } createandshowgui();

Packa ihop och visa fönstret import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SimpleFrame { private static void createandshowgui() { } } JFrame frame = new JFrame("Simple Frame"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setpreferredsize(new Dimension(480,200)); frame.pack(); frame.setvisible(true); public static void main(string[] args){ } createandshowgui();

Vi vill ha lite komponenter i fönstret JFrame frame = new JFrame("Frame with menu"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setpreferredsize(new Dimension(480,200)); JMenuBar menubar=new JMenuBar(); frame.add(menubar, BorderLayout.NORTH); JMenu menu = new JMenu("File"); menubar.add(menu); JMenuItem quit = new JMenuItem("Quit"); menu.add(quit); quit.addactionlistener(new ActionListener(){ public void actionperformed(actionevent e){ System.exit(0); }}); //Display the window. frame.pack(); frame.setvisible(true);

JMenuBar - Lägg den högst upp JFrame frame = new JFrame("Frame with menu"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setpreferredsize(new Dimension(480,200)); JMenuBar menubar=new JMenuBar(); frame.add(menubar, BorderLayout.NORTH); JMenu menu = new JMenu("File"); menubar.add(menu); JMenuItem quit = new JMenuItem("Quit"); menu.add(quit); quit.addactionlistener(new ActionListener(){ public void actionperformed(actionevent e){ System.exit(0); }}); //Display the window. frame.pack(); frame.setvisible(true);

JMenu JFrame frame = new JFrame("Frame with menu"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setpreferredsize(new Dimension(480,200)); JMenuBar menubar=new JMenuBar(); frame.add(menubar, BorderLayout.NORTH); JMenu menu = new JMenu("File"); menubar.add(menu); JMenuItem quit = new JMenuItem("Quit"); menu.add(quit); quit.addactionlistener(new ActionListener(){ public void actionperformed(actionevent e){ System.exit(0); }}); //Display the window. frame.pack(); frame.setvisible(true);

JMenuItem JFrame frame = new JFrame("Frame with menu"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setpreferredsize(new Dimension(480,200)); JMenuBar menubar=new JMenuBar(); frame.add(menubar, BorderLayout.NORTH); JMenu menu = new JMenu("File"); menubar.add(menu); JMenuItem quit = new JMenuItem("Quit"); menu.add(quit); quit.addactionlistener(new ActionListener(){ public void actionperformed(actionevent e){ System.exit(0); }}); //Display the window. frame.pack(); frame.setvisible(true);

Sammanfattning Huvudfönster - JFrame JFrame är en container, i vilken vi lägger Components JMenuBar En menyrad JMenu En meny JMenuItem Ett menyelement

Sammanfattning, forts... JFrame har en default layout manager som heter BorderLayout ------------------------------- NORTH ------------------------------ W E E A S CENTER S T T ----------------------------- SOUTH

Java-concept och Swing 2 It Don't Mean a Thing If It Ain't Got That Swing

LayoutManager JFrame har en default layout manager som heter BorderLayout ------------------------------- NORTH ------------------------------ W E E A S CENTER S T T ----------------------------- SOUTH

BorderLayout I NORTH och SOUTH tar komponenter maximal bredd men behåller sin föredragna höjd. I WEST och EAST tar komponenter maximal höjd men behåller sin föredragna bredd. I CENTER växer komponenter på alla bredder

BorderLayout - example

FlowLayout Vi kan ändra layout för en frame: frame.setlayout(new FlowLayout()); FlowLayout lägger ut komponenter i rad i den ordning vi anger. Från höger till vänster och om de inte får plats på en rad, så fortsätter man på en ny rad, centrerat.

FlowLayout - exempel Komponenterna behåller sin föredragna storlek.

GridLayout - ett rutnät Komponenter placeras ut i ordning, vänster till höger enligt kolumner och rader. Komponenter växer åt alla håll om fönstret förstoras.

Kombinera olika layouter Ofta vill man ha lite olika layout på olika delar. Paneler är här användbara. En panel är bara en yta som kan innehålla komponenter. Panelen kan ha en annan layout än fönstret.

Exempel - miniräknare Idé: Fönstret har BorderLayout och vi lägger displayen i NORTH. Vi lägger knapparna i CENTER. Ingen logik, bara exempel på layout här!

Calculator - example

Kodsnuttar från Calculator JFrame frame = new JFrame("Pocket calculator"); JTextField display = new JTextField(20); JPanel buttons=new JPanel(); buttons.setlayout(new GridLayout(0,4)); // 4 cols, as many rows as needed JButton button9 = new JButton("9"); // and so on... buttons.add(button7); buttons.add(button8); buttons.add(button9); buttons.add(buttondiv); // First row! // and so on frame.add(display, BorderLayout.NORTH); frame.add(buttons, BorderLayout.CENTER);

Sammanfattning BorderLayout - Smala ytor i N,W,S,E, bred yta i CENTER FlowLayout - Allt i en rad, fyller på mer fler rader centrerat GridLayout - kolumner och rader Layouter går att kombinera, t ex med paneler

Sammanfattning komponenter Vi har sett: JButton - en knapp Panel - en tom yta att lägga andra komponenter i JTextField - ett textinmatningsfält (Första filmen såg vi också menyrader, menyer och menyelement i)

Java-concept och Swing 3 Papa s got a brand new bag GridBagLayout

En lite krångligare/kraftfullare layout GridBagLayout är betydligt kraftfullare än de vi sett hittills. Kraftfull betyder dock ofta krångligare att använda...

GridBagLayout - have it your way Man specificerar precis hur komponenter ska placeras ut och var: gridx, gridy - vilken cell? 0,0 är högst upp, tv gridwidth, gridheight - hur stor plats? fill - om komponenten skalas om, hur göra? (det finns mer men ovanstående är basic ;-) )

GridBagLayout - en snyggare calc! Vi försöker härma den här: Display: 2 rader, 6 kolumner = ska vara två knappar bred

Calc copycat

Calculator - kodfragment // En JFrame har en ContentPane som är en Container Container pane = frame.getcontentpane(); pane.setlayout(new GridBagLayout()); // Skapa ett constraints-object GridBagConstraints c = new GridBagConstraints(); // Sätt egenskaper för c: c.weightx=1; c.weighty=1; c.gridwidth = 6; c.gridheight = 2; c.gridx = 0; c.gridy = 0; JTextPane display = new JTextPane(); pane.add(display, c); // add i klassen Container

Metoden add i Container public void add(component comp, Object constraints) Adds the specified component to the end of this container. Also notifies the layout manager to add the component to this container's layout using the specified constraints object.

Knapparna i första raden JButton button7 = new JButton(" 7 "); c.gridx = 0; c.gridy = 3; pane.add(button7, c); JButton button8 = new JButton(" 8 "); c.gridx = 1; c.gridy = 3; pane.add(button8, c); JButton button9 = new JButton(" 9 "); c.gridx = 2; c.gridy = 3; pane.add(button9, c); JButton buttondiv = new JButton(" / "); c.gridx = 3; c.gridy = 3; pane.add(buttondiv, c); JButton buttonclear = new JButton(" C "); c.gridx = 4; c.gridy = 3; pane.add(buttonclear, c); JButton buttondel = new JButton(" <x"); c.gridx = 5; c.gridy = 3; pane.add(buttondel, c);

Likamedknappen är bredare JButton buttonequals = new JButton(" = "); c.gridwidth = 2; // Två knappar bred c.gridheight = 1; c.gridx = 4; c.gridy = 6; pane.add(buttonequals, c);

Java-concept och Swing 4 Refactoring

Upprepning av liknande kod // " sym " [ x ] [ y ] pane.add JButton button7 = new JButton(" 7 "); c.gridx = 0; c.gridy = 3; pane.add(button7, c); JButton button8 = new JButton(" 8 "); c.gridx = 1; c.gridy = 3; pane.add(button8, c); JButton button9 = new JButton(" 9 "); c.gridx = 2; c.gridy = 3; pane.add(button9, c); JButton buttondiv = new JButton(" / "); c.gridx = 3; c.gridy = 3; pane.add(buttondiv, c); JButton buttonclear = new JButton(" C "); c.gridx = 4; c.gridy = 3; pane.add(buttonclear, c); JButton buttondel = new JButton(" <x"); c.gridx = 5; c.gridy = 3; pane.add(buttondel, c); // OSV (detta vara bara första raden med 6 knappar...)

Refactoring - lyft ut upprepning private static GridBagConstraints c = new GridBagConstraints(); private static JFrame frame = new JFrame("Pocket calculator"); private static void addbutton(string sym, int x, int y){ } Container pane = frame.getcontentpane(); c.gridx = x; c.gridy = y; pane.add(new JButton(sym), c);

Vinsten? Mer kompakt kod // First row: addbutton(" 7 ",0,3); addbutton(" 8 ",1,3); addbutton(" 9 ",2,3); addbutton(" / ",3,3); addbutton(" C ",4,3); addbutton(" <x",5,3); // Second row: addbutton(" 4 ",0,4); addbutton(" 5 ",1,4); addbutton(" 6 ",2,4); addbutton(" * ",3,4); addbutton(" ( ",4,4); addbutton(" ) ",5,4); // Third row: addbutton(" 1 ",0,5); addbutton(" 2 ",1,5); addbutton(" 3 ",2,5); addbutton(" - ",3,5); addbutton(" x²",4,5); addbutton("sqrt",5,5); // Last row: addbutton(" 0 ",0,6); addbutton(", ",1,6); addbutton(" % ",2,6); addbutton(" + ",3,6); JButton buttonequals = new JButton(" = "); // = är speciell... c.gridwidth = 2; c.gridheight = 1; // vi kör gamla sättet c.gridx = 4; c.gridy = 6; pane.add(buttonequals, c); // Jämför med tidigare kod för bara första raden!

Java-concept och Swing 5 Listen and take action

Registrera en lyssnare på en knapp // ActionListener är ett interface med blott en metod // Vi använder en anonym inre klass för att registrera en lyssnare: b.addactionlistener( // Anonym implementation av interfacet ActionListener new ActionListener(){ public void actionperformed(actionevent e){ display.settext(e.getactioncommand()); } });

Registrera en lyssnare på en knapp // ActionListener är ett interface med blott en metod // Vi använder en anonym inre klass för att registrera en lyssnare: b.addactionlistener( // Anonym implementation av interfacet ActionListener new ActionListener(){ public void actionperformed(actionevent e){ display.settext(e.getactioncommand()); } }); // Ett ActionEvent från en JButton har knappens text som actioncommand()