1 F18-20-2006 Denna vecka Måndag: Ett komplext problem Tisdag: Lektion. Kväll: Essäfrågan distribueras via webben. Dead-line onsdag 17 maj, kl 12.00. Inlämning elektroniskt och på papper. Onsdag: Grafik (2 4 timmar) Torsdag: Laboration Vetenskapsteori. Förberedelse: Skriv ut citat från www. Läs igenom en gång. Laborationen examineras genom hemtentan. 2 F18-20-2006 Idag Enkel grafik, presenterat som tre exempel: 1. Superenkla fönster 2. Enkla fönster 3. Fönster med knappar Mellan exempel 1 och 2, vissa principer och klasser. Återstår: Eget jobb! 3 F18-20-2006 Grafiskt användarsnitt Gäller Java av idag Hjälp till självhjälp: Kokbokslösningar, lösningar med kommentarer, inga "djupa" förklaringar. Syften: 1. Smaka på grafiken. Kunna bygga vidare själv. 2. Öva på användning av bibliotek. 4 F18-20-2006 Vi kommer att se Grafik hanteras med bibliotek Mycket utantillläxor Inte svårt, men kanske stökigt/klumpigt Smidigare lösningar att vänta? o Mycket anomalier, en vetenskaplig revolution kommer?
5 F18-20-2006 Exempel 1 Superenkelt grafikexempel Idé: Fördefinierade standardklasser - slippa återuppfinna hjulet. Från Skansholm. Två små fönster på skärmen. Den första som begär ett svar, den andra som bara skriver ut. Vad heter du? OK Cancel 6 F18-20-2006 Exempel 1: Två små fönster public class Hej2 { public static void main (String[] arg) { String namn; String hälsning; namn = JOptionPane.showInputDialog("Vad heter du?"); hälsning = "Välkommen " + namn; JOptionPane.showMessageDialog(null, hälsning); System.exit(0); Välkommen Anders OK Detta exempel innehåller ingen tänka-själv eller designa-själv komponent. Allt är givet av klassbiblioteket. 7 F18-20-2006 Hur vet man det här? = > Hur hittar man? => Strategi: Bygg på exempel Sök efter en idé eller klass i en lärobok/ett exempel Gå till http://java.sun.com/j2se/1.5/docs/api/index.html Klicka på rätt klass och rimliga metoder 8 F18-20-2006 Läs: 1. Slå upp JOptionPane 2. Välj showinputdialog JOptionPane showinputdialog public static String showinputdialog(object message) throws HeadlessException Shows a question-message dialog requesting input from the user. The dialog uses the default frame, which usually means it is centered on the screen. Parameters: message - the Object to display Throws: HeadlessException - if GraphicsEnvironment.isHeadless returns true See Also: GraphicsEnvironment.isHeadless()
9 F18-20-2006 Huvudlöst undantag? 10 F18-20-2006 JOptionPane Vi klickar och hittar public class HeadlessException extends UnsupportedOperationException Thrown when code that is dependent on a keyboard, display, or mouse is called in an environment that does not support a keyboard, display, or mouse. 1. Slå upp JOptionPane 2. Välj showmessagedialog showmessagedialog public static void showmessagedialog(component parentcomponent, Object message) throws HeadlessException Brings up an information-message dialog titled "Message". Parameters: parentcomponent - determines the Frame in which the dialog is displayed; if null, or if the parentcomponent has no Frame, a default Frame is used message - the Object to display Throws: See Also: HeadlessException - if GraphicsEnvironment.isHeadless returns true GraphicsEnvironment.isHeadless() 11 F18-20-2006 Lite teori: Grafiska komponenter Två uppsättningar standardklasser awt (Abstract Window Toolkit), java.awt.* Swing, nyare, häftigare, javax.swing.* Många klassnamn börjar med J Skilj på komponenter som ritas av operativsystemet som ritas av Java. I Swing ritas det mesta av Java => flexibelt, komplext Swing utnyttjar awt 12 F18-20-2006 Klasshierarki för "fönster" Förenklad Component Container Window JApplet Jwindow JFrame JDialog Component: Superklass för alla. Färg, storlek Container: "Förvaring" av grafiska objekt som inte kan visas direkt på skärmen. JApplet: Ritas i en webbrowser JWindow: Fönster på skärmen, utan kant JFrame: Fönster med kant och titelrad JDialog: Fönster för tillfälliga meddelanden. För varje klass finns många metoder.
13 F18-20-2006 Swingklasser, förenklade, för objekt som visas i fönster JLabel: en enkel text eller enkel bild JButton: knapp med text eller bild 14 F18-20-2006 Exempel 2 Skriv ett program som skriver "Våren är kommen" i ett fönster. Vi bestämmer färger, samt storlekar, typsnitt, var texten ska stå etc.... JRadioButton: knappar som fungerar tillsammans JMenuBar: menyer 16 F18-20-2006 18 F18-20-2006 import java.awt.*; public class MittFonster extends JFrame { public MittFonster(String t) { Container c = getcontentpane(); c.setlayout(new FlowLayout()); c.setbackground(color.yellow); JLabel l = new JLabel(t,JLabel.CENTER); l.setverticalalignment(jlabel.center); l.setforeground(color.blue); l.setfont(new Font("SansSerif", Font.BOLD, 24)); l.setpreferredsize(new Dimension(500,200)); c.add(l); setsize(500,200); pack(); setvisible(true); setdefaultcloseoperation(exit_on_close); Exempel 3 Skriv ett programm som skapar ett fönster med texten Röd i rött. Med tryckknappar kan man välja texten Röd, Gul eller Grön, skriven i rätt färg. Röd Röd Gul Grön public static void main(string[] args) { MittFonster f = new MittFonster("Våren är kommen");
20 F18-20-2006 import java.awt.*; import java.awt.event.*; Exempel 3 public class MinSignal extends JFrame implements ActionListener { private JRadioButton rödknapp = new JRadioButton("Röd", true); private JRadioButton gulknapp = new JRadioButton("Gul", false); private JRadioButton grönknapp = new JRadioButton("Grön", false); private JLabel l = new JLabel("Röd"); public MinSignal() { public void grönfärg() { public void gulfärg() { public void rödfärg() { public void actionperformed(actionevent e) { public static void main(string[] arg) { MinSignal s = new MinSignal(); 21 F18-20-2006 public MinSignal() { l.setforeground(color.red); Container c = getcontentpane(); c.setlayout(new GridLayout(4,1)); c.add(l); c.add(rödknapp); c.add(gulknapp); c.add(grönknapp); ButtonGroup färger = new ButtonGroup(); färger.add(rödknapp); färger.add(gulknapp); färger.add(grönknapp); rödknapp.addactionlistener(this); gulknapp.addactionlistener(this); grönknapp.addactionlistener(this); pack(); setvisible(true); setdefaultcloseoperation(exit_on_close); public void grönfärg() { l.settext("grön"); l.setforeground(color.green); public void gulfärg() { l.settext("gul"); l.setforeground(color.yellow); public void rödfärg() { l.settext("röd"); l.setforeground(color.red); public void actionperformed(actionevent e) { Object action = e.getsource(); if (action == grönknapp) grönfärg(); if (action == gulknapp) gulfärg(); if (action == rödknapp) rödfärg();