• No results found

Objektorienterad programmering med Java Swing

N/A
N/A
Protected

Academic year: 2021

Share "Objektorienterad programmering med Java Swing"

Copied!
8
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

1

Programexempel

• Hello.java, Hej2.java

• Kvadrat.java

• Hello.html (enkel html)

• Direkt3.java, Direkt3.html (applets)

• Direkt3bjava, Direkt3bhtml

• Frame3.java (en applikation i Swing)

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.

3

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.

(2)

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.

5

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).

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]

7

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

(3)

Komponenter i AWT

Component

Button TextComponent Checkbox Container Label List Scrollbar Canvas

TextArea TextField Panel Window ScrollPane

Dialog Frame Applet

9

Komponenter i Swing

Container(AWT)

JComponent

... JSlider JScrollBar JScrollPane JTextComponent AbstractButton JPanel JLabel

JEditorPane JTextArea JTextField

JToggleButton JButton

JRadioButton JCheckBox

Komponenter i Swing (forts)

Applet(AWT)

JApplet Frame(AWT) Dialog(AWT)

Window(AWT)

JWindow JFrame JDialog

11

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’

(4)

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)

13

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.

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), ...,

15

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.

(5)

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

17

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).

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.

19

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.

(6)

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

21

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

Förenklad klassstruktur

Container

JComponent JFrame,JWindow JDialog, JInternalFrame

[Diverse verktyg och skrivytor]

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

23

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.

(7)

Container: Utseende

En mängd metoder, tex

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

setBorder(Border), getBorder()

25

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

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

27

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.

(8)

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

29

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

Nå, meningen med vårsalongen var ju också, att den skulle få denna massanslutning och att den skulle ge konstnärerna tillfälle till vad som just nu nog är mycket viktigt för

If you define an object in YAML and then define a Java instance instance variable with the same name and of compatible type, then JavaBuilders will set the reference on it

Mean swing ratio as a function of tempo (left) and absolute duration of second note as a function of tempo (right) for the four drummers and all excerpts.. Observe that the

• Ikke bruk produktet hvis tauet eller andre deler er skadet.. • Produktet eller monteringen skal ikke endres på

We will consider an existing and widely accepted electricity price process model, use the finite volume method to formulate a numerical scheme in order to calibrate the prices of

SkolL vilken anger att kränkande behandling är ett uppträdande som utan att vara diskriminering enligt diskrimineringslagen (2008:567) (DL) kränker en elevs värdighet.

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

public JTextField getSearchField(){...} //Sökfältet public JButton getSearchButton(){...} //Sökknappen public JButton