MER Java Foundation Classes (JFC)

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

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

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

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

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

Java-concept och Swing. Swing low, sweet chariot

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

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

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

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

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

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

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

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

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

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

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

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

Grafiska komponenter.

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

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

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

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

Projekt 2 XL. Observer-mönstret

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

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

OOP Objekt-orienterad programmering

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

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

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

OOP Objekt-orienterad programmering

Rita Egna Bilder, Timer

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

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Lab5 för prgmedcl04 Grafik

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

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

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

1 Grafiska komponenter

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

Lösningar till tentamen i EDAF25

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

Laboration 15 Grafiskt användargränssnitt

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

Lösningsförslag till tentamen

Design och konstruktion av grafiska gränssnitt

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

Arv och Grafiska Användargränssnitt

Design och konstruktion av grafiska gränssnitt

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

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

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

Grafik: Att "rita" egna komponenter

Tentamen i Objektorienterad programmering

Labbinstruktioner för Java/Swing

Lektion Händelsehanterare

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor

Upplägg. Introduktion. Examination. Mål. Konsekvenser. Java. Kursen heter konstruktion, ej design eller formgivning.

Java Direkt, upplaga 5 Innehåll

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

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

Arvshierarki. Object. Bostadshus. Flerfamiljshus. Villa

Frames, menyer och GUI-program

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

Design och konstruktion av grafiska gränssnitt

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

Fönsterhantering, grafik

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

Java Direkt, upplaga 6 Innehåll

Laboration 4: Game of Life

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

Lösningar till tentamen i EDAF25

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

Design och konstruktion av grafiska gränssnitt

Lösningsförslag till tentamen

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

Föreläsning 9. Arv Grafiska komponenter

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

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

Lösningsförslag till tentamen

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

Lösningsförslag till tentamen

Grafik, bilder och ljud

Objektorienterad programutveckling, fk

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

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

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

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

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

Java Direkt, upplaga 7 Innehåll

5 Användargränssnitt. 5.1 AWT och Swing

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

Exempel på användning av arv: Geometriska figurer

Transkript:

MER Java Foundation Classes (JFC) Swing

Swing Många klasser Vettigt att lära sig dem utantill Tror inte det... men det kan vara bra att ha en liten överblick över vad som finns

Hur lära sig? Principerna Model - view - controller Observer - observed Öva, dvs skriv kod Ofta och mycket Kolla på exempel

Vad är farorna Personlig erfarenhet Dålig dokumentation Logik på fel ställe

Exempel på några av komponenterna

LayoutManagers BorderLayout - Har vi tittat på FlowLayout - Har vi tittat på GridLayout CardLayout GridBagLayout etc

GridLayout

GridLayout Demo public class GridDemo extends JFrame{ public GridDemo() { this.setlayout(new GridLayout(3,2)); add(new JButton("Ett")); add(new JButton("Två")); add(new JButton("Tre")); add(new JButton("Fyra")); add(new JButton("Fem")); add(new JButton("Sex")); } } public static void main(string[] args) { GridDemo g=new GridDemo(); g.setvisible(true); } 129

Card layout

public class CardDemo extends JFrame{ private JPanel buttonpanel; private JPanel cardpanel; private CardLayout cl; public CardDemo() { setlayout(new BorderLayout()); cl=new CardLayout(); cardpanel=new JPanel(cl); cardpanel.add("one",new JButton("Ett")); cardpanel.add("two",new JButton("Två")); cardpanel.add("three",new JButton("Tre")); buttonpanel=new JPanel(); JButton first=new JButton("First"); first.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { cl.first(cardpanel); } }); buttonpanel.add(first);

Tabbed pane

public class TabbedDemo extends JFrame { public TabbedDemo( ) { super( Tabbed Demo ); JTabbedPane tp = new JTabbedPane( ); setcontentpane( tp ); JPanel jp = new JPanel( ); jp.add( new JButton( Ett ) ); tp.addtab( One, jp ); jp = new JPanel( ); jp.add( new JButton( Två ) ); tp.addtab( Two, jp ); jp = new JPanel( ); jp.add( new JButton( Tre ) ); tp.addtab( Three, jp ); } } pack(); setvisible( true );

BoxLayout Med denna layoutmanager så kan man lägga ut komponenter i boxar. Boxarna kan vara antingen horisontella eller vertikala med en komponent per rad/kolumn. Alternativ till att använda BoxLayout direkt är att använda Box klassen som är en container som har använderboxlayout + ett antal extra metoder för att tex lägga till mellanrum På bilden till höger används ett antal olika containrar med BoxLayout för att åstadkomma layouten

GridBagLayout

GridBagLayout was contributed to Javasoft by a programmer who wanted to support the Java effort. It was intended as a proof that the AWT offered enough features for programmers to write their own layout managers. It wasn't designed with human factors and ease of use in mind. If it bothers you (it bothers me) then just don't use it. Create your GUI on several panels and use the other layout managers as appropriate to get the exact effect you want. JavaSoft's AWT team project leader has said that eventually another layout manager will be added that does similar things to GBL, but is more intuitive. Bottom line: nobody has to waste any effort on GBL, there are better alternatives available. Peter van der Linden

Fler LayoutManagers Finns en bunt till Undersök de klasser som implemeterar någon av interfacen LayoutManager eller LayoutManager2

Layoutmanagers och designpatterns Layoutmanagers använder sig av ett designpatern som kallas för Strategy

Händelser Olika typer AdjustmentEvent ComponentEvent MouseEvent

Rita Händelsestyrt - styr inte själv paint update paintcomponent repaint, repaint(x)

Graphics drawstring drawline drawrect drawpolygon fillrect fillpolygon setcolor setfont

public class DrawingPanel extends JPanel { public DrawingPanel( ) { setbackground( Color.white ); setborder( BorderFactory.createTitledBorder( "Exempel" ) ); } public void paintcomponent( Graphics g ) { super.paintcomponent( g ); g.drawstring( "Bluttan", 100, 60 ); Font cfont Font newfont = g.getfont(); = new Font( cfont.getname(), cfont.getstyle(), cfont.getsize() + 20 ); } } g.setfont( newfont ); g.drawstring( "Blättan", 200, 80 ); g.drawline( 50, 50, 100, 200 ); g.setcolor( Color.blue ); g.drawroundrect( 150, 300, 100, 125, 15, 15 ); g.setcolor( Color.red ); g.filloval( 400, 200, 50, 180 );

Java 2D Förbättrad grafik så att det blir lite snyggare Anti-aliasing Fyll med mönster, gradienter, etc Bättre typsnittshantering figurer, linjer, transformeringar

public void paintcomponent( Graphics g ) { super.paintcomponent( g ); Graphics2D g2 = (Graphics2D) g; g2.setrenderinghint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON ); g2.setstroke( new BasicStroke( 4.0f ) ); g2.drawstring( "Bluttan", 100, 60 ); Font cfont = g2.getfont(); Font newfont = new Font( cfont.getname(), cfont.getstyle(), cfont.getsize() + 20 ); g2.setfont( newfont ); g2.drawstring( "Blättan", 200, 80 ); Line2D line = new Line2D.Double( 50.0, 50.0, 100.0, 200.0 ); g2.draw( line ); g2.setpaint( Color.blue ); RoundRectangle2D rect = new RoundRectangle2D.Double( 150.0, 300.0, 100.0, 125.0, 15.0, 15.0 ); g2.draw( rect ); } g2.setpaint( Color.red ); Ellipse2D oval = new Ellipse2D.Double( 400.0, 200.0, 50.0, 180.0 ); g2.fill( oval );

Fler prylar JOptionPane JLabel Flera knappar JSlider, JSpinner Listor, popupmenyer och träd ImageIcon Menyer, toolbars, etc Adaptor klasser JScrollPane

JOptionPane Enkelt att göra olika meddelandedialoger Finns färdiga Kan modifiera och göra egna

JOptionPane.showMessageDialog( null, "Kolla", "Vad kul", JOptionPane.ERROR_MESSAGE ); x = JOptionPane.showConfirmDialog( null, "Hello world") ; s = JOptionPane.showInputDialog( null, "Skriv nåt" ); JOptionPane.showMessageDialog( null, "Du skrev: " + s, "Meddelande", JOptionPane.INFORMATION_MESSAGE );

JLabel Enkel text Eller en bild Eller båda

private JLabel statusline = new JLabel( ); statusline.settext( "Användare: " + username + " Lösenord: " + password );

Knappar Push buttons Check buttons Radio buttons Grupper av radio buttons Jan Erik Moström

JRadioButton catbutton = new JRadioButton(catString); catbutton.setmnemonic(keyevent.vk_c); catbutton.setactioncommand(catstring); ButtonGroup group = new ButtonGroup(); group.add(birdbutton); group.add(catbutton); group.add(dogbutton); group.add(rabbitbutton); group.add(pigbutton); catbutton.addactionlistener(this); public void actionperformed(actionevent e) { picture.seticon(createimageicon("images/" + e.getactioncommand() + ".gif")); }

ImageIcon Enkelt sätt att få symboler på olika ställen Klarar JPEG, GIF och PNG bilder

Menyer Menyrad Menyer Menyval Jan Erik Moström

JMenuBar menubar = new JMenuBar( ); setjmenubar( menubar ); JMenu file = new JMenu( "Arkiv" ); JMenu edit = new JMenu( "Redigera" ); menubar.add( file ); menubar.add( edit ); JMenuItem fileclose = new JMenuItem( "Stäng" ); fileclose.addactionlistener( new ActionListener() { public void actionperformed( ActionEvent ae ) { // Stäng fönstret AddressBook.this.dispose(); } } ); file.add( fileclose );

class OpenAction extends AbstractAction { OpenAction( String name ) { super( name, new ImageIcon( "bilder/middle.gif" ) ); } } public void actionperformed( ActionEvent ae ) { statusline.settext( "Inte öppnas nåt nu inte!!" ); } file.add( new OpenAction( "Öppna" ) );

Toolsbars Ligger längst upp Flyter omkring Jan Erik Moström

JToolBar tb = new JToolBar( ); tb.add( new HiAction() ); tb.add( new PlainAction( ) ); class PlainAction extends AbstractAction { PlainAction( ) { super( "plain", new ImageIcon( "bilder/rabbit.png" ) ); } } public void actionperformed( ActionEvent ae ) { statusline.settext( "Jag vill ha en morot" ); }

Popup-menyer JPopupMenu JComboBox Jan Erik Moström

String[] petstrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; JComboBox petlist = new JComboBox(petStrings); petlist.setselectedindex(4); petlist.addactionlistener(this); public void actionperformed(actionevent e) { JComboBox cb = (JComboBox)e.getSource(); String petname = (String)cb.getSelectedItem(); updatelabel(petname); } JComboBox patternlist = new JComboBox(patternExamples); patternlist.seteditable(true); patternlist.addactionlistener(this);

Listor JList Jan Erik Moström

jl = new JList( new Object[] { "Första", new Person( "Kalle", "Anka" ), "Tredje", "Fjärde", "Femte", "Etthundratusen kronor", new Person( "Knatte", "Anka" ), new Person( "Fnatte", "Anka" ), new Person( "Tjatte", "Anka" ), new Person( "Kajsa", "Anka" ), } );

JScrollPane Implementerar själva scrollningen JScrollPane sp = new JScrollPane( jl ); add( sp );

Träd

DefaultMutableTreeNode root = new DefaultMutableTreeNode( "Ankeborg" ); JTree tree = new JTree( root ); JScrollPane sp = new JScrollPane( tree ); DefaultMutableTreeNode duck = new DefaultMutableTreeNode( "Anka" ); duck.add( new DefaultMutableTreeNode( "Kalle" ) ); duck.add( new DefaultMutableTreeNode( "Knatte" ) ); duck.add( new DefaultMutableTreeNode( "Tjatte" ) ); duck.add( new DefaultMutableTreeNode( "Fnatte" ) ); duck.add( new DefaultMutableTreeNode( "Kajsa" ) ); duck.add( new DefaultMutableTreeNode( "Arne" ) ); duck.add( new DefaultMutableTreeNode( "Sven" ) ); duck.add( new DefaultMutableTreeNode( "Bettan" ) ); duck.add( new DefaultMutableTreeNode( "Sonja" ) ); root.add( duck ); DefaultMutableTreeNode vonduck = new DefaultMutableTreeNode( "von Anka" ); vonduck.add( new DefaultMutableTreeNode( "Joakim" ) ); root.add( vonduck );