Grafiska program i Java

Relevanta dokument
Grafiska program i Java. AWT och Swing? AWT. Swing. JButton. Button

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering

Händelsestyrda program

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

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

Programstyrd / händelsestyrd

Mer om grafiska komponenter. Händelsestyrda program

Laboration 15 Grafiskt användargränssnitt

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

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

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

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

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

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

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

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

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

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

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

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

Rita Egna Bilder, Timer

5 Användargränssnitt. 5.1 AWT och Swing

Grafiska komponenter.

Java-concept och Swing. Swing low, sweet chariot

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

Lektion Händelsehanterare

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

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

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

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

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Grafiska användargränssnitt i Java

Fönsterhantering, grafik

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

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

Föreläsning 14: Grafik & mera händelsehantering

Grafiska användargränssnitt i Java

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

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

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

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

1 Grafiska komponenter

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

Lab5 för prgmedcl04 Grafik

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

Arv och Grafiska Användargränssnitt

Grafiska användargränssnitt i Java

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

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

Arv och polymorfi. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den.

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

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

Föreläsning 11. Att rita egna bilder.

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Föreläsning 11. Att rita egna bilder. Grafik. Klassen Graphics. Fönstrets koordinatsystem

ID1004 Laboration 3, 5-6 November 2012

Arvshierarki. Object. Bostadshus. Flerfamiljshus. Villa

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

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets

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

Laboration 4: Game of Life

GUI Nyckelbeståndsdelar

Klasser för grafik och bildhantering

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

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

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

Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets

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

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

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

Frames, menyer och GUI-program

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

Laboration 24 Databasen MySQL och java

Arv. Grafiska komponenter. Arv. Arvhierarki. Arv. Föreläsning 12 (OH-bilder 9)

Föreläsning 9. Arv Grafiska komponenter

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

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

Labbinstruktioner för Java/Swing

Grafik, bilder och ljud

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Inlämningsuppgift 1 Programmeringsteknik MN1 vt02

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

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.

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

Exempel på användning av arv: Geometriska figurer

GUI-program med Swing

Fönsterhantering, grafik

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

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

Tentamen FYTA11 Javaprogrammering

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

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

Transkript:

8-1 Program- eller händelsestyrd exekvering Grafiska program i Java 8-2 Programstyrd exekvering I ett ett textbaserat användargränssnitt avgör programmet när det är dags för ineller utmatnig av data. Exekveringen är programstyrd. Händelsestyrd (eng. event-driven) exekvering I ett program med grafiska användargränssnitt styrs programmets exekvering av olika händelser som inträffar. Händelsen initieras av någon aktivitet från användaren, t.ex. ett musklick eller musrörelse eller tangentnedtryckning. Programmet reagerar när händelserna inträffar. Händelsestyrd programmering För att utveckla ett händelsestyrt program som hanterar de händelser som inträffar måste man oftast använda funktioner i något grafiskt användarbibliotek I Java finns dessa som funktioner som klasser i paketet java.awt.event Programmeringsgränssnittet för grafik i Java : Java Graphics API innehåller en mängd klasser för att utveckla grafiska program. De viktigaste typerna av klasser är: Komponenter för användargränssnittbeskriver fönster, knappar, textfält etc. Layouthantering - organiserar och placerar ut gränssnittskomponenter på lämpligt sätt i ett fönster Händelsehantering - fångar och hanterar händelser, t.ex. musklick eller tangent-nedtryckningar, som användaren initierar Grafik ritverktyg med hjälpmedel för färger och typsnitt, etc,

8-3 8-4 AWT och Swing? Java Graphics API Java Graphics API erbjuder två besläktade gränssnitt för att utveckla grafiska användargränssnitt. Bägge verktygen är plattformsoberoende och applikationerna antar den exekverande plattformens look and feel AWT (Abstract Windowing Toolkit, java.awt) Många gränssnittsklasser i AWT använder en motsvarande s.k. peer-klass för att ritas ut på en viss plattform. Denna bygger på s.k. native kod. Utseendet blir härigenom delvis beroende av plattformen. Swing (java.swing) Ett nyare paket (fr. o. m JDK 1.2 ). Rekommenderas av de som utvecklar Java. Bygger på och använder även klasser i AWT. Har utökad funktionalitet med fler och mer avancerade komponenter. Utnyttjar plattformens kapacitet bättre. Använder s.k. lättviktskomponenter (utan peer-klasser) skrivna helt i Java och får därför ett mer homogent utseende på olika plattformar än AWT. Swing - ingår i JFC (Java Foundation Classes) AWT Swing Java Graphics API är ett utmärkt exempel på användning av klasser, arv och gränssnitt. Det består av två paket som innehåller bl.a följande klasser: java.awt: Component - superklass till alla klasser för användargränssnitt. Definierar många och viktiga egenskaper för alla komponenter. Container - grupperar gränssnittskomponenter. Frame, Applet och Panel är exempel på containrar som innehåller AWT-komponenter LayoutManager är ett gränssnitt i Java som används av en container för att positionera och placera komponenter på önskad plats i en container AWTEvent med sina subklasser - representerar händelser som komponenterna skapar Font, FontMetrics och Color är hjälpklasser för att ange färg och typsnitt på grafiska komponenter Graphics - används för att rita text, linjer och figurer javax.swing: JComponent - superklass till alla lättvikts-swingkomponenter, som t.ex. JButton JTextField m.m. JFrame och JApplet - fönster där swingkomponenter placeras AWTEvent Font LayoutManager 1 Classes in the java.awt package Heavyweight Button JButton Object FontMetrics Color Panel Applet JApplet Graphics Swing-komponenter har i allmänhet ett J i början på namnet Component * Container Window Frame Dialog JFrame JDialog Man bör undvika att blanda AWT och Swing-komponenter JComponent Swing Components in the javax.swing package Lightweight

Klassen JFrame 8-5 Swing-komponenter i ett JFrame-fönster 8-6 Gränssnittskomponenter kan inte visas direkt på skärmen utan måste placeras på en skärmyta som ingår i något fönster. Skärmytan är en s.k. container (t.ex en Frame eller en Applet). Klassen Frame beskriver ett fristående fönster som används i applikationer med AWT-komponenter Klassen JFrame är grunden för att skapa en grafisk applikation med Swing-komponenter. Ett JFramefönster består av en titelrad och en content pane där komponenter placeras. JFrame Titelrad Content pane Skapa ett JFrame-fönster Bygg upp gränssnittet genom att välja en LayoutManager, samt skapa och lägga till Swingkomponenter i fönstrets ContentPane import javax.swing.*; import java.awt.*; class DemoInmatning extends JFrame DemoInmatning() Container con=getcontentpane(); con.setlayout(new FlowLayout()); JLabel rubrik = new JLabel("Namn:"); con.add(rubrik); JTextField textfält = new JTextField(12); con.add(textfält); JButton knapp=new JButton("Skapa"); con.add(knapp); Komponent En Applet är en skärmyta som ingår som en del i webbläsarens fönster. Applets kommer att presenteras närmare senare. När en Swingbaserad Java applet ska skapas ärver man klassen JApplet. public static void main(string[]args) DemoInmatning frame = new DemoInmatning(); frame.settitle("demo Inmatning"); frame.setsize(300, 75); frame.setvisible(true); frame.setdefaultcloseoperation(jframe.exit_on_close);

Hantering av en händelse 8-7 Lyssnare som en inre klass 8-8 En knappklickning leder till att ett ActionEvent-objekt skapas. Klassen ActionEventDemo är en lyssnare som hanterar händelsen genom att implementera metoden actionperformed i lyssnargränssnittet ActionListener import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ActionEventDemo extends JFrame implements ActionListener private Button knapp = new Button("OK"); private JTextField textfält = new JTextField(14); public ActionEventDemo() getcontentpane().setlayout(new FlowLayout()); getcontentpane().add(knapp); getcontentpane().add(textfält); knapp.addactionlistener(this); public void actionperformed(actionevent event) textfält.settext("ok-knappen har klickats"); Händelsehanterare (Lyssnarmetod) Lyssnaren kan även definieras som en egen klass. Eftersom den inte används av andra klasser defineras den enklast som en inre klass import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ActionEventDemo extends JFrame private Button knappen = new Button("OK"); private JTextField textfältet = new JTextField(14); public ActionEventDemo() getcontentpane().setlayout(new FlowLayout()); getcontentpane().add(knappen); getcontentpane().add(textfältet); knappen.addactionlistener(new Lyssnare()); private class Lyssnare implements ActionListener public void actionperformed(actionevent event) textfältet.settext(" OK-knappen har klickats "); public static void main(string[] argument) ActionEventDemo fönstret = new ActionEventDemo(); fönstret.settitle("actionevent Demo"); fönstret.pack(); fönstret.setvisible(true); fönstret.setdefaultcloseoperation(jframe.exit_on_close); public static void main(string[] argument) ActionEventDemo fönstret = new ActionEventDemo(); fönstret.settitle("actionevent Demo"); fönstret.pack(); fönstret.setvisible(true); fönstret.setdefaultcloseoperation(jframe.exit_on_close);

Ett exempel med två textfält och en knapp 8-9 Fånga och hantera händelser 8-10 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class DemoTextField extends JFrame implements ActionListener private JTextField tfin; private JTextField tfout; private JButton bt; public DemoTextField() settitle("demo TextField"); Container con=getcontentpane(); con.setlayout(new FlowLayout()); tfin = new JTextField("Skriv något här"); con.add(tfin); bt = new JButton("OK"); con.add(bt); tfout = new JTextField(15); con.add(tfout); För att hantera en händelse definierar man en lyssnare och: (1) registrerar lyssnarobjektet som ska lyssna på källobjektets händelser (2) implementerar de speciella lyssnarmetoder i ett lyssnargränssnitt som motsvarar den aktuella händelsen När en händelse inträffar anropas automatiskt motsvarande lyssnarmetod i lyssnaren. Händelseobjektet skickas med som parameter till lyssnarmetoden (1) bt.addactionlistener(this); Lyssnarobjekt bt.addactionlistener(this); setsize(250, 100); setvisible(true); setdefaultcloseoperation(exit_on_close); public void actionperformed(actionevent event) tfout.settext(tfin.gettext()); (2) public void actionperformed(actionevent event) tf.settext("ok"); Lyssnarmetod Händelseklass public static void main(string[] argument) new DemoTextField();

Händelseklasser, lyssnargränssnitt och lyssnarmetoder 8-11 Namnkonventioner för händelser och lyssnare 8-12 Händelseklass Lyssnargränssnitt Lyssnarmetod (hanterare) ActionEvent ActionListener actionperformed ItemEvent ItemListener itemstatechanged WindowEvent WindowListener windowclosing windowopened windowiconified windowdeiconified windowclosed windowactivated windowdeactivated ContainerEvent ContainerListener componentadded componentremoved ComponentEvent ComponentListener componentmoved componenthidden componentresized componentshown FocusEvent FocusListener focusgained focuslost TextEvent TextListener textvaluechanged KeyEvent KeyListener keypressed keyreleased keytyped MouseEvent MouseListener mousepressed mousereleased mouseentered mouseexited mouseclicked MouseMotionListener mousedragged mousemoved AdjustmentEvent AdjustmentListener adjustmentvaluechanged Det finns normalt ett lyssnargränssnitt för varje händelseklass. Namnet på händelseklassen motsvaras av namnet på lyssnargränssnittet och namnet på metoden för att registrera en lyssnare till en komponent Ex: ok.addactionlistener(new Lyssnare()); class Lyssnare implements ActionListener public void actionperformed(actionevent event) result.settext( OK ); Händelseklass: ActionEvent Registrera lyssnare: addactionlistener Lyssnargränssnitt: ActionListener Allmänt: Lyssnare registreras med addxlistener för XEvent Lyssnargränssnittet heter XListener för XEvent

Några vanliga gränssnittskomponenter 8-13 Properties i klassen JComponent 8-14 Exempel på vanliga properties i klassen JComponent font Typsnitt som används för komponentens text tooltiptext Typsnitt som används för komponentens när markören är över den background Komponentens bakgrundsfärg foreground Komponentens förgrundsfärg Exempel på några klasser för färdiga gränssnittskomponenter: JButton beskriver en knapp som kan innehålla text JCheckbox beskriver en markeringsruta tillhörande text som användaren kan markera JLabel beskriver en enkel textstrång som visas i ett fönster doublebuffered Anger om komponenten ritas ut med s.k.dubbelbuffring border Anger komponentens ram JList beskriver en ruta med flera element där ett eller flera kan väljas. Listan är bläddringsbar om inte alla element får plats i rutan JChoice beskriver en combobox i form av en popup-meny med olika alternativ som kan väljas. Det valda alternativet visas i rutan. JTextField och JTextArea beskriver textområden med en resp flera rader där användaren kan skriva in eller läsa text Scrollbar beskriver en rullningslist där användaren förändra ett värde som ligger mellan två givna värden JPanel beskriver ett delfönster, används i komplicerade gränssnitt preferredsize minimumsize maximumsize Anger komponentens ideala storlek Anger komponentens minsta storlek Anger komponentens största storlek

JButton 8-15 JLabel 8-16 Några konstruktorer och metoder för JButton : JButton(String text) En label-komponent visar en kort text eller bild i ett fönster. Används oftast för att beskriva andra komponenter Några konstruktorer och metoder för JLabel : JButton(String text, Icon icon) JButton(Icon icon) knapp.settext( Annat ); // Sätter ny text på knapp String s = knapp.gettext(); // Hämta aktuell knapptext knapp.setenabled(false); // Gör knappen otryckbar knapp.setenabled(true); JLabel(String text, int horizontalalignment) JLabel(String text) JLabel(Icon icon) JLabel(Icon icon, int horizontalalignment) l.settext( Ny text ); // Sätter ny text på label n String s = l.gettext() // Returnerar aktuell text

JTextField 8-17 JTextArea 8-18 Några konstruktorer och metoder för JTextField : JTextField(int columns) Skapar ett tomt textfält med specificerat antal kolumner JTextField(String text) Skapar ett textfält initierat med texten text En textyta där flera textrader kan matas in Textytan kan förses med rullningslister. Några konstruktorer och metoder för JTextArea: JTextArea(int r, int k) Skapar en textrea, med r rader och k kolumner JTextField(String text, int columns) Skapar ett initierat textfält med texten text och specificerat antal kolumner tf.settext( Annan text ); tf.gettext(); tf.seteditable(false); // Sätter in texten // Returnerar texten // Förhindrar inmatning JTextArea(String s, int r, int k) Skapar ett initierat textarea med texten s och r rader och k kolumner ta.gettext(); ta.settext( Ny text + \n + Nästa rad ); //returnerar hela texten (i en String) //sätter in ny text ta.append( \noch nästa rad... ); ta.seteditable(false); ta.setlinewrap(true); //lägga till ny text på slutet //förhindrar inmatning //ger automatisk radbrytning

Exempel med JComboBox 8-19 JComboBox 8-20 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class DemoComboBox extends JFrame public DemoComboBox() settitle("demo ComboBox"); JComboBox cb = new JComboBox(); cb.additem("merkurius"); cb.additem("venus"); cb.additem("jorden"); cb.additem("mars"); cb.additem("jupiter"); cb.additem("saturnus"); cb.additem("neptunus"); cb.additem("uranus"); cb.additem("pluto"); En combobox är en lista i form av en popup-meny med olika alternativ som kan väljas. Det valda alternativet visas i rutan Några konstruktorer och metoder för JComboBox: JComboBox() Skapar en tom combobox JComboBox (Object[] stringitems) Skapar en combobox initierad med stringitems, ett fält med strängar Container con = getcontentpane(); con.setlayout(new FlowLayout()); con.add(cb); setdefaultcloseoperation(exit_on_close); public static void main(string[] argument) DemoComboBox f = new DemoComboBox(); f.setsize(185, 250); f.setvisible(true); jcbo.additem(object item) Lägger till alternativet item till jcbo jcbo.getitemat(int index) Returnerar alternativet i jcbo med angivet index

Exempel med JList 8-21 JList 8-22 En lista där ett eller flera alternativ i listan kan väljas av användaren. Scrollning kan fås med klassen JScrollPane om antalet alternativ i listan är stort. ListTest() super("exempel Lista"); List li=new List(6); li.add("merkurius"); li.add("venus"); li.add("jorden"); li.add("mars"); li.add("jupiter"); li.add("saturnus"); li.add("neptunus"); li.add("uranus"); li.add("pluto"); getcontentpane().setlayout(new FlowLayout()); getcontentpane().add(li); setdefaultcloseoperation(exit_on_close); setsize(200,150); show(); Några konstruktorer och metoder i JList JList() Skapar en tom lista JList(stringItems) Skapar en lista initierad med stringitems, ett fält med strängar li.getselectedindex() Ger index för det första markerade alternativ li.getselectedindices() Ger ett fält med index för markerade alternativ li.getselectedvalue() Ger första markerade alternativ i listan list.getselectedvalues() Ger ett fält med de markerade alternativen i listan

JCheckbox och JRadioButton 8-23 Gruppera radioknappar 8-24 RadioTest() super("exempel checkboxar"); Container con=getcontentpane(); con.setlayout(new GridLayout(2,1)); JCheckBox cb=new JCheckBox("Valbar"); JPanel p1=new JPanel(); p1.add(cb); con.add(p1); JRadioButton rb=new JRadioButton("Valbar2"); JPanel p2=new JPanel(); p2.add(rb); con.add(p2); Några konstruktorer och metoder för JCheckbox och JRadioButton : JCheckBox() JCheckBox(String text) JCheckBox(String text, boolean selected) markerad om selected är true JCheckBox(Icon icon) JCheckBox(String text, Icon icon) JCheckBox(String text, Icon icon, boolean selected) (samma konstruktorer för JRadioButton) cb.isselected() Returnerar true om cb är markerad Görs genom att JRadioButton läggs i en ButtonGroup RadioTest2() super("exempel checkboxar"); JRadioButton b1=new JRadioButton("Blå"); JRadioButton b2=new JRadioButton("Röd", true); JRadioButton b3=new JRadioButton("Vit"); JRadioButton b4=new JRadioButton("Svart"); ButtonGroup grupp=new ButtonGroup(); grupp.add(b1); grupp.add(b2); grupp.add(b3); grupp.add(b4); JPanel p=new JPanel(); p.add(b1); p.add(b2); p.add(b3); p.add(b4); getcontentpane().add(p); Tyvärr kan man inte (enkelt) se vilken i gruppen som är vald... Avläsning kan göras genom att anropa isselected() för de olika knapparna

Ex: Användaraktiviteter, källobjekt och händelseklasser 8-25 Java s APIdokumentation 8-26 Exempel några användaraktiviteter på källobjekt och motsvarande händelseklasser: Användaraktivitet Källobjekt Händelseklass Klickat på en knapp JButton ActionEvent Trycka på retur i ett JTextField ActionEvent textfält Bytt textinnehåll JTextComponent TextEvent Dubbelklickat på ett JList ActionEvent listobjekt Markererat eller JList ItemEvent avmarkerat element med enkelklick Markererat eller JComboBox ItemEvent avmarkerat element

Layouthanterare 8-27 Exempel med FlowLayout 8-28 En layouthanterare (eng. Layout Manager) är ett objekt i AWT som styr utplaceringen av komponenter för att anpassa ett gränssnitt efter skillnader i olika plattformar. Varje container har en layouthanterare. Så här definieras en layouthanterare av typen FlowLayout för en container: con.setlayout(new FlowLayout()); Några vanliga typer av layouthanterare är: FlowLayout Ordnar komponenter radvis från vänster till höger, tills att raden har fyllts, på liknande sätt som texten i en boksida,. Komponenternas ursprungliga storlek behålls vid utplaceringen. GridLayout Fönstret delas upp i ett rutnät med rader och kolumner. Komponenterna ordnas radvis från vänster till höger. Alla komponenter får samma storlek. BorderLayout Fönstret delas in i fem områden. Fyra områden längs fönstrets fyra kanter och ett femte område i fönstrets mitt. GridBagLayout Liknar GridLayout men delar in fönstret ett rutnät med rutor av olika storlek. En komponent kan uppta flera celler. CardLayout CardLayout skiljer sig från andra layouthanterare genom att alla komponenter inte syns på en gång. Man definierar istället en kortlek som användaren kan bläddra i och studera ett i taget (jmfr flikar) import javax.swing.*; import java.awt.*; class FlowLayoutDemo extends JFrame FlowLayoutDemo() Container con=getcontentpane(); con.setlayout(new FlowLayout()); con.setbackground(color.white); con.add(new JButton("Knapp 1")); con.add(new JButton("Knapp 2")); con.add(new JLabel("Label 3")); con.add(new JTextField("Text 4")); public static void main(string[]args) FlowLayoutDemo frame = new FlowLayoutDemo(); frame.settitle("flowlayout Demo"); frame.setsize(200, 100); frame.setvisible(true); frame.setdefaultcloseoperation(exit_on_close); Komponentplaceringen ändras automatiskt om fönstrets storlek ändras.

FlowLayout 8-29 Exempel med GridLayout 8-30 Komponenterna ordnas radvis från vänster till höger. När en rad fyllts påbörjas nästa rad. import javax.swing.*; import java.awt.*; Konstruktorer: new FlowLayout(a) a anger justering på raden och kan vara FlowLayout.LEFT, FlowLayout.CENTER eller FlowLayout.RIGHT new FlowLayout(a, dx, dy) dx och dy anger avståndet i pixlar mellan komponenterna new FlowLayout() Komponenterna centreras på raden med default avstånd mellan komponenterna class GridLayoutDemo extends JFrame GridLayoutDemo() Container con=getcontentpane(); con.setlayout(new GridLayout(2,3)); con.add(new JButton("Knapp 1")); con.add(new JButton("Knapp 2")); con.add(new JTextField("Text 4")); con.add(new JLabel("Label 3")); con.add(new JButton("Knapp 5")); public static void main(string[]args) GridLayoutDemo frame = new GridLayoutDemo(); frame.settitle("gridlayout Demo"); frame.setsize(300,100); frame.setvisible(true); frame.setdefaultcloseoperation(exit_on_close); FlowLayout är default LayoutManager för klasserna JApplet och JPanel.

GridLayout 8-31 Exempel med BorderLayout 8-32 Fönstret delas in i ett rutnät med rader och kolumner. Alla celler rymmer en komponent och får samma storlek. Komponenterna placeras radvis i rutnätet från vänster till höger med början i första raden Konstruktorer: new GridLayout(r,k) Placerar komponenterna i r rader och k kolumner. Värdet 0 innebär godtyckligt antal rader respektive kolumner new GridLayout(r, k, dx, dy) dx och dy anger avstånd mellan komponenterna import javax.swing.*; import java.awt.*; class BorderLayoutDemo extends JFrame BorderLayoutDemo() Container con=getcontentpane(); con.setlayout(new BorderLayout()); con.add(new JLabel("EAST"), BorderLayout.EAST); con.add(new JButton("SOUTH"), BorderLayout.SOUTH); con.add(new JTextField("WEST"), BorderLayout.WEST); con.add(new JButton("NORTH"), BorderLayout.NORTH); con.add(new JButton("CENTER"), BorderLayout.CENTER); public static void main(string[]args) BorderLayoutDemo frame = new BorderLayoutDemo(); frame.settitle("borderlayout Demo"); frame.setsize(300,200); frame.setvisible(true); frame.setdefaultcloseoperation(exit_on_close); Antalet kolumner i rutnätet justeras om antalet komponenter som placeras inte stämmer med angivna konstruktorvärden

BorderLayout 8-33 Gruppera komponenter med paneler 8-34 Delar upp fönstret i fem områden. Fyra områden längs fönstrets kanter (North, South, East eller West) och ett område i fönstrets centrum (Center). Områdenas storlek anpassas efter komponenterna. Vissa områden i fönstret kan vara tomma. Konstruktorer: new BorderLayout() new BorderLayout(dx, dy) dx och dy anger avstånd mellan komponenterna Metoder: add(c, plats ) Placerar ut komponenten c. plats kan vara BorderLayout NORTH, SOUTH, EAST, WEST eller CENTER Klassen Panel är en generell containerklass. Paneler fungerar som mindre containrar och används ofta för att gruppera gränssnittskomponenter. Paneler placeras oftast inuti en annan container, t.ex ett Frame-fönster eller en applet, men kan även placeras inne i en annan panel. En Frame-fönster indelas ofta i flera paneler, där varje panel har en egen layouthanterare. Frame Panel med Panel med BorderLayout är default LayoutManager för klassen Window med sina subklasser (JFrame och JDialog). Panel med Gränssnittskomponenter Gränssnittskomponenter Panel med Gränssnittskomponenter Gränssnittskomponenter

Exempel med paneler 8-35 Ritytor Graphics Context 8-36 import javax.swing.*; import java.awt.*; public class PanelerDemo extends JFrame PanelerDemo() Container con=getcontentpane(); con.setlayout(new BorderLayout()); JPanel p1=new JPanel(); p1.setlayout(new FlowLayout()); p1.add(new JButton("Lägg Till")); p1.add(new JTextField(10)); p1.add(new JButton("Avsluta")); con.add(p1, BorderLayout.NORTH); JTextArea ta=new JTextArea(); con.add(ta, BorderLayout.CENTER); public static void main(string[]args) PanelerDemo frame = new PanelerDemo(); frame.settitle("paneler Demo"); frame.setsize(300,200); frame.setvisible(true); frame.setdefaultcloseoperation(exit_on_close); Det går inte att rita direkt på en komponent. All ritning kräver en grafisk omgivning, ett s.k. graphics context. Javasystemet skapar automatiskt ett graphics context med ett objekt av klassen Graphics. All ritning sker genom anrop till metoder i Graphics-objektet Klassen Graphics innehåller metoder för att bl.a : skriva text, samt rita linjer och figurer drawstring, drawline, drawrect, drawoval,... formatera text och ange färg setfont, setcolor,... (visa bilder drawimage) Klassen JPanel kan även användas för att rita grafik (inklusive text) Man skapar en ny klass som ärver JPanel och överskuggar metoden paintcomponent och Ex. för att skriva text i grafisk mod: class MinPanel extends JPanel public void paintcomponent(graphics g) //super-klassens paintcomponent //SKA först anropas super.paintcomponent(g); g.drawstring( Hej Världen!, 50, 50); Vid anropet av paintcomponent överförs ett objekt av klassen Graphics, ett graphics context. Med ett anrop till metoder i Graphics-objektet ritar vi i panelen.

Koordinatsystem för grafik 8-37 Klassen Color 8-38 Positionerna i en rityta representeras med ett koordinatsystem där varje punkt representerar en bildpunkt (pixel). Koordinatsystemet har origo i övre vänstra hörnet, med ökande X-koordinater åt höger och med ökande Y-koordinater nedåt. Varje rityta har en bredd (width) och en höjd (heigth). Det som ritas utanför ritytan kan inte ses på skärmen. <0,0> X Klassen Color används för att ange färg på grafiska komponenter. Ett färgobjekt skapas med: Color c = new Color(r, g, b); Färgen defineras med tre rgb-värden (0..255) som anger färgstyrkan för de grundfärgerna röd, grön och blå. (255, 0, 0) ger röd (0, 0, 0) ger svart (255, 255,255) ger vit Ett ljusblått färgobjekt: <55,30> Color lightblue = new Color(175,175,255); Y <width-1, height-1> I klassen Color finns även 13 fördefinierade färgobjekt med de vanligaste färgerna Color.black, Color.red,... Ritytan

8-39 8-40 Ange färger Klassen Font Metoderna setforeground och setbackground i klassen Component anger förgrunds- och bakgrundsfärg på grafiska komponenter. Metoderna har ett objekt av klassen Color som argument. Exempel för att ange bakgrundsfärgen för en panel: Color lightblue = new Color(175,175,255); JPanel p1 = new JPanel(); p1.setbackground(lightblue); Alt. med standardfärg: JPanel p1 = new JPanel(); p1.setbackground(color.white); Klassen Graphics har metoden setcolor för att bestämma färg på geometriska figurer En objekt av klassen Font bestämmer textens typsnitt, stil och storlek. Font f = new Font(typsnitt, stil, storlek); Typsnitt: SansSerif, Serif, Monospaced, Dialog, eller DialogInput Helvetica, TimesRoman, Courier OBS! Det finns olika typsnitt på olika datorsystem Stil: Font.PLAIN, Font.BOLD, Font.ITALIC Storlek: Anges i antal punkter, t ex 12 Fonten sätts med metoden setfont som är definierad i klasserna Component och Graphics. Ex: public void paintcomponent(graphics g) super.paintcomponent(g); Font myfont = new Font("Times", Font.BOLD, 16); g.setfont(myfont); g.drawstring("welcome to Java", 20, 40); //ange en ny font g.setfont(new Font("Courier", Font.BOLD+Font.ITALIC, 12)); g.drawstring("welcome to Java", 20, 70); Det finns också en FontMetrics-klass som kan användas för att ta reda på längden på en textsträng med en viss font

Några exempel på fonter 8-41 Några metoder för ritning 8-42 import javax.swing.*; import java.awt.*; public class DemoFonter extends JFrame public DemoFonter() getcontentpane().add(new RitPanel()); public static void main(string[]args) DemoFonter frame = new DemoFonter(); frame.settitle("paneler Demo"); frame.setsize(200,150); frame.setvisible(true); frame.setdefaultcloseoperation(exit_on_close); class RitPanel extends JPanel public void paintcomponent(graphics g) super.paintcomponent(g); g.setfont(new Font("SansSerif", Font.PLAIN, 15)); g.drawstring("hej Världen!", 20, 20); g.setfont(new Font ("Serif", Font.BOLD, 15)); g.drawstring("hej Världen!", 20, 40); g.setfont(new Font("Monospaced", Font.PLAIN, 15)); g.drawstring("hej Världen!", 20, 60); g.setfont(new Font("Dialog", Font.ITALIC, 15)); g.drawstring("hej Världen!", 20, 80); g.setfont(new Font("DialogInput",Font.PLAIN+Font.ITALIC,15)); g.drawstring("hej Världen!", 20, 100); Klassen Graphics har bl.a följande ritmetoder för geometriska figurer och text : drawline(x1, y1, x2, y2) Ritar en linje från punkten (x1, y1) till (x2,y2) drawrect(x, y, b, h) Ritar en ofylld rektangel med övre vänster hörn i (x,y), bredd b och höjd h. Kan även ritas i 3D drawoval(x,y, b, h) Ritar en ofylld ellips som är inskriven i en rektangel med övre vänster hörn i (x,y), bredd b och höjd h drawpolygon(xp, yp, n) Ritar en ofylld månghörning. xp och yp är fält med punkternas x- resp. y-koordinater. n är antalet punkter: xp[] = x1, x2, x3; (alt. drawpolygon(p), p är ett Polygon-objekt) drawstring(txt, x, y) Ritar textsträngen txt med början i punkten (x,y). y- koordinaten anger textens baslinje De flesta figurer även kan ritas ifyllda (ex: fillrect). Övriga ritmetoder: drawarc, drawpolyline

Ett grafikexempel 8-43 import javax.swing.*; import java.awt.*; public class DemoGrafik extends JFrame public DemoGrafik() getcontentpane().add(new RitPanel()); public static void main(string[]args) DemoGrafik frame = new DemoGrafik(); frame.settitle( Grafik Demo"); frame.setsize(400,300); frame.setvisible(true); frame.setdefaultcloseoperation(exit_on_close); class RitPanel extends JPanel public void paintcomponent(graphics g) super.paintcomponent(g); g.drawrect(25, 25, 100, 50); g.setcolor(color.red); g.filloval(150, 100, 50, 50); g.fillrect(50, 150, 50, 75); g.drawline(370, 20, 32, 250); g.setcolor(color.yellow); int[] xarr = 350, 350, 150, 225, 125; int[] yarr = 100, 170, 250, 100, 50; g.fillpolygon(xarr, yarr, 5);