Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 18 Igår: Genomgång av dugga Rekursion Idag och på måndag: Om essän Lite, lite teori om konstanter Grafiska användargränssnitt Grundläggande funktionalitet Många exempel
Duggan Duggan blev för svår Vi sänker G-gränsen så att 9 p räcker Inte en kravsänkning Gränsen var för hög från början De som fått 7 8 p kan komplettera genom inlämningsuppgift (detaljer meddelas senare)
Essä: formalia Deadline: 5 juni (senarelagd!) Ca 1-2 sidor, normal formattering, radavstånd 1.5 Titel: Objektorienterad programmering som problemslösningsstrategi OBS! Se hemsidan! Följ instruktionerna för inlämning!
Essä: Vad och hur Personlig betraktelse: Fakta, men också bedömning och ställningstagande Förslag till upplägg: Vad är OO? Exempel på problem med OO-lösning Exempel på problem där OO är olämpligt OO:s relevans för dig som STS:are och civilingenjör
Hur vet jag detta? Essä: Vad och hur Föreläsningar: modellering av verkligheten med objekt inkapsling arv relationer mellan klasser Egna erfarenheter (labbar, projekt) Boken, hela kapitel 4
Essä: När? Börja fundera nu! Fundera under projektets gång Tips: börja skriva så fort som möjligt Deadline 5 juni
Lite teori: konstanter, final Ibland vill man ha variabler som inte kan ändras: π (3.14159...) antal sidor på en tärning (6) max antal spelare i Fia med knuff (4) Anges vid deklarationen m.h.a. final: public static final double PI = 3.14159; public static final int ANTAL_TARNINGSSIDOR = 6; public static final int MAX_ANTAL_SPELARE = 4;
Lite teori: konstanter, final Ordet variabel betyder ändringsbar final-variabler kallas konstanter Namnkonvention: STORA_BOKSTAVER_OCH_UNDERSTRECK_MELLAN_ORDEN
Lite teori: konstanter, final final används normalt tillsammans med static värdet på π beror ju inte på något objekt Variabel som är static final måste få sitt värde vid deklarationen: public static final double PI = 3.14159; public static final int ANTAL_RADER = 16;
Lite teori: konstanter, final Om man försöker ändra en konstant får man kompileringsfel: public static void main(string[] args) { PI = 4; } Kompileringsfel! ger bättre kod: mindre risk för misstag tydligt att värdet inte får ändras ledtråd till hur konstanten används, för den som läser koden
Grafiska användargränssnitt Grafiskt användargränssnitt = Graphical User Interface = GUI In- och utmatning sker i dialogrutor Fler möjligheter för användaren Kan bli mer lättanvänt Programmeraren behöver anstränga sig lite mer Skansholm 6.1 6.13 Lab 5 Vissa projekt
GUI i Java Java har bra möjligheter att skapa GUI Paket ingår i Java: javax.swing Vissa underpaket som javax.swing.text Inte svårt, men kräver mer kod
Enkla dialogrutor med klassen JOptionPane Klassmetoder för att skapa vanliga, enkla dialogrutor: showmessagedialog showinputdialog showconfirmdialog
Enkla dialogrutor med klassen JOptionPane: exempel Skapa ett GUI-program som: Läser in användarens namn Frågar om användaren vill ha glass Talar om vilket alternativ som valdes 1. 2. 3.
Avancerade GUI: Överblick Bygg GUI Från sina beståndsdelar, t.ex. knappar och textrutor Starta igång det hela Standard-procedur, lär utantill Hantera händelser, t.ex. musklick Metod för att hantera händelser anges då GUI:et byggs
Avancerade GUI: Bygg GUI Byggs hierarkiskt JFrame är ett fönster JPanel är en s.k. container-komponent: kan innehålla många andra komponenter Alla fönstrets komponenter läggs i JPanel:en (textrutor, knappar osv) Komponent läggs i annan komponent m.h.a. metoden add JFrame JPanel Komponent Komponent
Avancerade GUI: Bygg GUI Skapa en JFrame (ett fönster) Skapa en JPanel (att lägga komponenter i) Skapa komponenter t.ex. textrutor, knappar Ändra komponenters egenskaper t.ex. färg, text, storlek Lägg komponenterna i din JPanel metoden add komponenternas läge kan anges Lägg din JPanel i din JFrame
Avancerade GUI: Exempel Vi bygger ett GUI som innehåller: En textruta En kryssruta En OK-knapp En Avbryt-knapp Översikt av vad vi ska göra: Lägg komponenter i ett fönster och visa det Funktionalitet för att läsa av text och kryssrute-status Lägg komponenterna i snyggare ordning
Avancerade GUI: Händelsehantering Händelser: En knapp trycks in, en kryssruta kryssas, osv Vi kan ange en metod som anropas så fort en händelse inträffar. 4 steg: Lär utantill eller läs innantill Importera: import java.awt.event.*; I klassdefinitionen: class NamnOchGlass implements ActionListener { Skapa metoden actionperformed: public void actionperformed(actionevent e) { } Ange att actionperformed ska anropas när en knapp trycks (när vi bygger fönstret): knapp.addactionlistener(this);
Avancerade GUI: LayoutManager Layout: När komponenter läggs in i en JPanel, bestämmer ett objekt av klassen LayoutManager var de hamnar Vi kan byta ut LayoutManager om vi vill ändra utseendet Metoden setlayoutmanager i JPanel Vi kan ha nästlade JPanel-er för avancerad layout Vi kan lägga till osynliga objekt för att skapa mellanrum Box.createRigidArea(new Dimension(5, 5))
Avancerade GUI: Praktiska klasser Byggstenar (import javax.swing.*;) JFrame ett fönster JPanel fönstrets innehåll (allt utom ramen) JComponent basklass som andra ärver från: JButton JCheckBox JRadioButton JTextField JSpinner JList JSlider JComboBox
Avancerade GUI: Praktiska klasser Starta igång det hela (import javax.swing.*;) Runnable, SwingUtilities Hantera händelser (import java.awt.event.*;) Runnable, SwingUtilities Arrangera komponenter snyggt i fönstret (import javax.swing.*;) BoxLayout, BorderLayout, GridLayout, Box http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html (import java.awt.*;) Dimension
Avancerade GUI: Sammanfattning Använd hjälpen Alla klasser: http://java.sun.com/javase/6/docs/api/ Komponenter: http://java.sun.com/docs/books/tutorial/ui/features/components.html Layouter: http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html
Avancerade GUI: Sammanfattning Var inte för ambitiös Få saker att fungera först, gör det eventuellt snyggt senare Studera exempel T.ex. mina, eller http://java.sun.com/docs/books/tutorial/ui/features/components.html