• No results found

Objektorienterad programmering med Java Swing

N/A
N/A
Protected

Academic year: 2021

Share "Objektorienterad programmering med Java Swing"

Copied!
30
0
0

Loading.... (view fulltext now)

Full text

(1)

Objektorienterad programmering med Java Swing

Sven-Olof Nyström Uppsala Universitet

March 14, 2006 Skansholm: Kapitel 6

(2)

Programexempel

• Hello.java, Hej2.java

• Kvadrat.java

• Hello.html (enkel html)

• Direkt3.java, Direkt3.html (applets)

• Direkt3bjava, Direkt3bhtml

• Frame3.java (en applikation i Swing)

(3)

Swing och AWT AWT

• = Abstract windowing toolkit

• använder värddatorns fönstersystem (och ärver därigenom ’look and feel’)

• En minsta gemensam nämnare—tillåter bara de

operationer som definieras i samtliga fönstersystem (Windows, Mac, Unix...)

Man kan till exempel inte ha en knapp med en bild.

(4)

Swing och AWT (forts) Swing:

• Helt skrivet i Java

• Swing definierar motsvarigheter till ‘nästan’ alla AWTs komponenter + några klasser till

• Klasserna i Swing ärver från klasser i AWT

• Swing definierar sitt eget utseende. Man kan välja

‘look and feel’ oberoende av värddator.

(5)

Grafiska användarinterface (GUI) Vad består ett GUI av?

• En pekare “pil” som styrs av användaren.

• fönster och ikoner som skapas av en applikation.

• Diverse komponenter, till exempel knappar, skjutreglage, textfält, bilder

• Användaren kommunicerar med fönstersystemet via klick och musrörelser.

(6)

Vad består... (forts)

• Användaren kan tex flytta omkring fönster på skärmen—påverkar ej applikationen.

• Användaren kan kommunicera med programmet genom att göra val på menyer, klicka på knappar, fylla i textrutor etc. Varje operation som användaren utför kan få programmet att göra olika saker.

• Viktig aspekt: Användaren bestämmer i vilken

ordning olika operationer ska utföras (i motsats till ett textorienterat interface).

(7)

Design av ett GUI: Två problem

• Presentera information från programmet

• Ta emot information från användaren (musrörelser, klickningar och tangenttryckningar)

[Idag fokuserar vi på det första problemet]

(8)

Vad gäller för de olika byggstenarna (komponenterna) i ett GUI?

(tex: fönster, knappar, skjutreglage, ...)

• De ritas på skärmen (och har färg, form, ...)

• tar emot knapptryckningar..

• vissa hanteras som självständiga objekt på skärmen, andra ingår som komponenter i nåt större

(9)

Komponenter i AWT

Component

Button TextComponent Checkbox Container Label List Scrollbar Canvas

TextArea TextField Panel Window ScrollPane

Dialog Frame Applet

(10)

Komponenter i Swing

Container(AWT)

JComponent

... JSlider JScrollBar JScrollPane JTextComponent AbstractButton JPanel JLabel

JEditorPane JTextArea JTextField

JToggleButton JButton

JRadioButton JCheckBox

(11)

Komponenter i Swing (forts)

Applet(AWT)

JApplet Frame(AWT) Dialog(AWT)

Window(AWT)

JWindow JFrame JDialog

(12)

Om AWT och Swing

• AWT och Swing har ungefär samma struktur

• Swing ingår som en del av AWTs klasshierarki: alla klasser i Swing ärver från AWT-klassen Container

• Klasser i Swing har ett namn som börjar på ’J’

(13)

De grundläggande byggstenarna

• Komponenter (arvingar till Component)

• Behållare (arvingar till Container)

• Layouthanterare (implementerar gränssnittet LayoutManager)

• Händelser (arvingar till den abstrakta basklassen AWTEvent)

• Lyssnare (gränssnitt som man implementerar för att ta hand om händelser)

(14)

De grundläggande byggstenarna (forts)

Alla komponenter utom fönster (Window och Dialog) måste placeras i en behållare för att synas.

Man placeras en komponent genom att anropa någon av behållarens add-metoder. Vilken metod man bör

använda styrs av vilken layout-hanterare man valt.

(15)

Klassen Component

Klassen Component har metoder för

• Uppritning: paint(Graphics), update(Graphics), repaint()

• Händelsehantering (senare föreläsning)

• Egenskaper: färg - setForeground(Color), ..., typsnitt - setFont(Font), Font getFont()

storlek - setSize(int w, int h), ...

position - setLocation(int x, int y), ...,

(16)

Klassen Component: koordinater

Varje komponent har sitt eget koordinatsystem med (0, 0) i övre högra hörn. Positionen anges i behållarens

koordinatsystem.

Notera att positionen normalt inte anges på detta sätt, man överlåter ansvaret på en layout-hanterare.

(17)

Om AWT och Swing (forts)

Vissa av klasserna svarar mot igenkännbara komponenter, tex

Frame, JFrame — ett fönster (med kanter och titelrad)

Dialog, JDialog — ett dialogfönster för tillfälliga meddelanden

Button, JButton — klickbara knappar

CheckBox, JCheckBox — en ruta som användaren markerar för att göra ett visst val

Label, JLabel — en enkel text eller bild

(18)

Om AWT och Swing (forts)

Andra klasser beskriver interna strukturer som inte är direkt synliga för användaren, tex

• Component – Se ovan

• Container — Beskriver vanligen en yta som andra komponenter kan placeras på.

Definierar en metod add för att lägga till komponenter (och en metod remove för att ta bort).

(19)

Om AWT och Swing (forts)

• JWindow — ett fristående fönster på skärmen, utan kanter och titelrad.

• JComponent — Superklassen för (nästan) alla komponenter i Swing.

Motsvarar klasserna Component och Container i AWT.

Förutom funktionaliteten från Component och

Container hanterar JComponent ramar, tips (en slags hjälpfunktioner), hantering av tangenttryckningar.

(20)

Om AWT och Swing (forts)

• JPanel — En rektangulär yta på skärmen. Beskriver en del av ett fönster.

Man kan använda ett system av JPanel-objekt för att beskriva en komplicerad layout.

• JScrollPane — Rymmer en enda komponent.

Om storleken för den komponent som lagras är

större än JScrollPane-objektet, adderas skjutreglage så att man kan se hela objektet.

(21)

Några hjälpklasser

Dimension — Höjd och bredd

Color — Färg

Font — Olika typsnitt, tex new Font...

Border — Ramar

Graphics — Ett slags ritverktyg som skickas som parameter till metoder som ritar upp en komponent

Layout — Beskriver hur komponenter ska placeras på en yta

(22)

En närmare titt på Container, JComponent och JWindow

Förenklad klassstruktur

Container

JComponent JFrame,JWindow JDialog, JInternalFrame

[Diverse verktyg och skrivytor]

(23)

Container

En container kan innehålla andra komponenter

(barnkomponenter). Motsats: föräldrakomponenter

• add(x) adderar en komponent

• add(n, x) för att placera komponent vid viss position

• remove(x) för att ta bort

• getParent() för att ta fram föräldern

(24)

Container (forts)

För att placera en komponent b i ett fönster w (tex JFrame), skriv

w.getContentPane().add(b)

getContentPane plockar fram en särskild arbetsyta.

(25)

Container: Utseende

En mängd metoder, tex

background(Color), getBackground() setForeground(Color), getForeground() setFont(Font), getFont()

setBorder(Border), getBorder()

(26)

Container: Layout

I stället för att placera ut komponenterna i ett fönster med (tex) koordinater, använder man speciella layouthanterare som placerar ut komponenterna enligt någon strategi.

På så sätt får man (förhoppningsvis) en design som

fungerar bra på olika typer av skärmar, om användaren ändrar storlek etc.

BorderLayout — Arbetar med max 5 komponenter.

Dessa ska placeras på någon av positionerna North, West, Center, East, South

(27)

Layout: exempel

c.setLayout(new BorderLayout())

bestämmer layoutstrategi för en container.

För att placera nåt på den övre delen, skriv

c.add("North", ...);

Program: VisaBorderLayout.java,

VisaBorderLayout2.java, VisaBorderLayout2.java

(28)

Layout (forts)

GridLayout — Placerar ut komponenterna enligt ett koordinatsystem.

Program: VisaGridLayout.java

FlowLayout — Komponenterna placeras från vänster till höger, uppifrån och ner

Program: VisaFlowLayout.java

BoxLayout — Radar upp komponenterna horisontellt eller vertikalt

CardLayout — Komponenterna placeras ’på varandra’ så att en komponent i taget blir synlig.

(29)

Exempel: “Kalkylator”

En kalkylator består av två delar; ett sifferfönster och en knappsats. Konstruera knappsatsen med gridlayout och placera sifferfönstret och knappsatsen med borderlayout.

Programexempel: Kalk.java

Liknar en kalkylator, men designen är inte helt lyckad.

Försök 2, med snyggare knappar. kalk2.java

(30)

Sammanfattning

• Java har två system för att skriva GUI—AWT och Swing

• I ett program med ett GUI styr användaren vad som ska hända härnäst

• Vi har fokuserat på att presentera information för användaren—mycket pyssel men egentligen inte så komplicerat

References

Related documents

MEN i fall där objekt av våra egna klasstyper har pekare som datamedlemmar, framförallt pekare till manuellt allokerat minne så kommer vi behöva definera hur detta ska fungera i

I Detta innebär i förlängningen att funktioner deklarerade med static inte kan komma åt variabler deklarerade utan static eftersom det inte är specificerat vilken

Rättigheterna visas (via ls -l) som tre grupper med rwx där r står för läsrättighet, w för skrivrättighet och x för rättigheten att exekvera filen.. Första gruppen

plats för en referens till ett objekt av typen SegelPlan plats för en referens till ett objekt av typen String int length=0; // man kan ange ett initialt värde.

En bokning är möjlig när tidsintervallet inte överlappar tidsintervallet för någon av de redan existerande bokningarna. Klassen ska också ha

kommer denna klass att ärva sina egenskaper från Media , men att set och get metoder för klassens två fält ska finnas.. Är antalet sidor fler än 1 så skrivs pages ut

En modellklass LifeModel i ett program som kan simulera denna utveckling lagrar den aktuella generationen i en tillståndsvariabel med deklarationen.. private

• För att programmet ska kunna reagera på händelser kopplar man på olika typer av lyssnare till komponenter i fönstret. • Lyssnarna kan fånga upp händelser som