Kurt Nørmark ©
Department of Computer Science, Aalborg University, Denmark
September 2001
Abstract Previous lecture Next lecture Index References Contents | Vi fortsætter i denne lektion vores diskussion og gennemgang af grafiske brugergrænseflader i Java. Vi ser først på Swing, som er den seneste version Java's understøttelse af grafiske brugergrænseflader. Swing erstatter således AWT. Et andet stort emne i denne lektioner Java's event model. |
Swing i forhold til AWT |
Swing i forhold til AWT Slide Note Contents Index References |
|
|
Valg af 'look and feel' i Swing Slide Note Contents Index References | For en konkret illustration af look and feel i Swing henviser til Farveblander eksemplet, jf. henvisningen forneden på denne side. Det er ikke muligt at illustrere de forskellige look and feels på Calculator eksemplet (eksemplet involverer ikke tilstrækkeligt interessante komponenter). |
|
|
|
Eksempler på look and feel Slide Note Contents Index References | Vi viser her eksempler på forskellige 'looks' af farveblanderprogrammet. Vi refererer til en senere side, hvor vi ser nærmere på, hvordan man beder om en bestemt layout manager. |
Figure. Motif look | ![]() |
Figure. Metal look | ![]() |
Figure. Windows look | ![]() |
|
Brugergrænseflade komponenter i Swing |
Komponenter i Swing Slide Note Contents Index References |
|
|
|
Komponent specialiseringshierarkiet i Swing Slide Note Contents Index References | Her viser vi en oversigt over JComponent klassehierarkiet i Swing. Hierarkiet er ikke helt komplet. Vi har bestræbt os på at gøre hierarkiet sammenligneligt med det tilsvarende AWT hierarki, for derved lettest muligt at kunne danne sig et overblik over forskelle og ligheder med AWT. Kursiverede klasser er - som sædvanlig - abstrakte. De grå, fede niveauer svarer ikke til klasser, men er kun skudt ind for at indfange grupperinger, som ikke modsvares af (abstrakte klasser) i Swing. |
|
|
Oversigt over top-niveau containere i Swing Slide Note Contents Index References |
|
|
|
|
Eksempel: Div Mod calculator Slide Note Contents Index References | Vi ser nu på et bekendt eksempel, nemlig kalkulatoren der kan beregne kvotient og rest fra forrige lektion. Vi viser først en udgave af programmet, som er en ren applikation, altså uden nogen som helst indblanding af applets. Java 1.2 understøtter naturligvis applets, JApplet's, men det kræver en speciel Browser plugin for at anvende disse. Derved tiltrækker applet's endnu mindre interesse, idet der nu er endnu mindre sandsynlighed for, at modtageren faktisk kan se en Applet, som vi har skrevet. |
|
Program: AWT udgave af kalkulatoren som en applikation (ikke applet).
Vi vælger først at konvertere applet'en fra forrige lektion til en applikation i en Frame.
| ![]() |
Exercise 13.1. Kalkulatoren i Swing | Sidste gang arbejde vi med en opgave, som tog udgangspunkt i den meget simple 'kalkulator' med en grafisk brugergrænseflade i AWT. Det er naturligt i denne lektion at udforske en Swing udgave af dette program. Derfor bedes I tage udgangspunkt i jeres resultat fra sidste gang (eller min løsning) og konvertere dette program til Swing. I den forbindelse bedes I genopfriske de få - men mere principielle - forskelle mellem et AWT og et Swing program. Når Swing programmet virker kan I overveje at udvide programmet, i retning af de ideer, som var indeholdt i formuleringen fra forrige lektion. |
|
Eksempel: Farveblander Slide Note Contents Index References | Vi ser her på det andet eksempel, som blev introduceret i forrige lektion, nemlig farveblanderen. Vi har igen konverteret eksemplet til en applikation. |
|
Program: Swing udgave af farveblanderen.
Vi har fremhævet forandringerne i forhold til AWT programmet fra forrige lektion.
| ![]() |
|
|
|
Menuer i Swing Slide Note Contents Index References |
|
Dette er en delvis gentagelse af dele af komponenthierarkiet (fra en tidligere slide) som har noget med menuer at gøre. |
|
Et menu eksempel fra the Java Tutorial Slide Note Contents Index References | Vi viser her et eksempel på menubars, menuer og menu items, taget direkte fra the Java tutorial |
Program: MenuDemo fra The Java Tutorial.
Det blå sted viser erklæringerne af Menu instansvariable af relevante typer.
Det grå sted viser hvor vi laver MenuBar'en.
Det røde sted viser hvordan vi laver den første menu i baren.
Det grønne sted viser hvordan vi laver det første menu item.
Det lilla sted viser hvordan man håndterer hierarkiske menuer (en menu er i sig
selv et menu item).
|
|
|
Popup menuer i Swing Slide Note Contents Index References |
|
|
|
Avancerede komponenter i Swing |
Komponenten ColorChooser Slide Note Contents Index References |
|
|
Program: ColorChooserDemo fra The Java Tutorial.
Vi har fremhævet de interessante steder i programmet i forhold til vore interesser.
| ![]() |
|
Tekst komponenter Slide Note Contents Index References |
|
Vi viser her det relevante udsnit af komponent hierarkiet, som specialiserer tekst komponenten JTextComponent i Swing |
|
Andre avancerede Swing komponenter Slide Note Contents Index References |
|
|
|
Events og Listeners |
Events i Java Slide Note Contents Index References |
The concept Java event: Et Java event er et objekt, som i detaljer beskriver egenskaberne ved en hændelse |
|
|
Event hierarkiet i Java Slide Note Contents Index References | Vi ser her på det begrebslige hierarki af events i Java, der er repræsenteret som et klassehierarki i Java AWT biblioteket |
Vi fokuserer her alene på AWTEvents, og dets underklasser. De fleste 'terminale events' har tilknyttet et Java Interface, der i større detaljer opregner de forskellige konkrete events som hører hjemme i event klassen. Dog håndteres alle Componet events under ét via interfacet ComponentListener. Eksempelvis findes der et WindowListener interface, som indeholder metoder der skal reagere på vinduesåbning, -lukning, -ikonisering, mv. |
Hvad indeholder et event objekt? Slide Note Contents Index References | Vi kan beskrive dette ved at se på klientgrænsefladen af et event objekt |
|
Et AdjustmentEvent udsendes når brugeren justerer på 'skyderen' på en Scrollbar. Eventet som opstår i den forbindelse tillader os at aflæse skyderens position med getValue() på eventet |
Listeners i Java Slide Note Contents Index References | Vi studerer nu begrebet (event) listener |
The concept listener: En Listener er et objekt, som abonnerer på særlige typer af events i brugergrænseflade komponenter, og som håndterer events via beskeder, som sendes til et model objekt | En Listener er et objket som pr. abonnement får besked om når der forekommer en relevant hændelse i brugergrænsefladen. Listener objektet reagerer på hændelsen ved at sende en besked til et model objekt |
|
Listener klassen i farveblandereksemplet Slide Note Contents Index References | For at blive konkret ser vi nu på listener klassen fra farveblander eksemplet |
Program: Klassen ColorListener.
Vi ser at klassen implementerer to listener interfaces (vist med rødt).
Listener objektet gemmer referencer til presentations objektet (vist med brunt).
De to metoder actionPerformed og adjustmentValueChanged implementerer de to interfaces
ActionListener og AdjustmentListener (vist med blåt)
|
|
|
Implementation af listeners med adapters Slide Note Contents Index References | Vi ser her på en fleksibel teknik til definition af listener klasser via såkaldte adapter klasser |
|
Program: Brug af en WindowAdapter i metoden main i klassen ColorPresenter.
Metoden main i klassen ColorPresenter bliver kaldt når vi ønsker at udføre farveblanderen som
en applikation (i modsætning til en applet, hvor udgangspunktet for programudførelsen jo var init metoden).
Vi ser en singulært defineret klasse, som ikke har et navn, og som specialiserer
klassen WindowAdapter
|
|
The concept singulær defineret klasse: En sigulært defineret klasse er en klasse uden navn, som direkte optræder et sted, hvor klasser ellers refereres via et navn | Singulært definerede klasser sparer os for sædvanlige klassedefinitioner. Singulære klassedefinitioner giver kortere (men ikke nødvendigvis mere læselige) programmer. I Java optræder sigulært definerede klasser typisk i forbindelse med en afledning via extends |
Program: Et alternativt til singulære klasser: En indre klasse i ColorPresenter.
Vi ser her en indre klasse WindowCloser, som specialiserer WindowAdapter (vist med rødt).
Vi har erklæret den static, efter konkret (men indirekte råd fra Compileren, idet
compileren ikke tror der findes en instans af den ydre klasse ColorPresenter).
Her er altså tale om en 'statisk nested klasse'. I metoden main bliver det nu
lettere at se, hvad det er for et objekt der virker som window listener (vist med blåt)
|
|
|
Tegneprimitiver i Java |
Tegning i AWT Slide Note Contents Index References | Her tilsidst i denne lektion vender vi tilbage til noget af det basale, nemlig hvordan man egentlig tegner grafiske elementer i Java. Som sagt, udgøres af de fleste brugergrænseflader af standardelementer, hvor programmøren fritages for ansvaret for at tegne og skrive de enkelte elementer af grænsefladen. Her går vi et abstraktionsniveua ned, for at se, hvordan man selv kan tegne i et Java vindue, når eller hvis behovet melder sig. Vi ser og opsamler først på nogle basale forhold omkring tegning af grafiske figurer i Java |
|
|
Tegning i Swing Slide Note Contents Index References |
|
|
Koordinatsystemer Slide Note Contents Index References | Vi vil her kort se på det koordinatsystem, som defineres af en komponent. Koordinatsytemet vil blive brugt hvis komponenten indeholder subkomponenter. Dette er tilfældet hvis komponenten er en Container. |
|
Figure. Illustration af en komponents koordinatsytem. Det farvede område viser udstrækningen af en komponent med bredden 'width' og højden 'height'. | ![]() |
|
|
Farver Slide Note Contents Index References | Man kan naturligvis styre farverne af de elementer man tegner. Her ser vi kort på hvordan. |
|
|
Hvad er XOR mode? Slide Note Contents Index References | XOR tegne mode udmærker sig ved at en tegneoperation er reversibel. Det betyder med mere almindelige ord at vi kan komme tilbage til den oprindelige tegning T selv efter vi har tegnet en figur oven i T; blot det sker i XOR mode. |
|
|
Table. Tabellægning af den logiske funktion XOR. Tabellen definerer den boolske funktion XOR. I forhold til en normal OR funktion er det den første række i tabellen, der afviger |
|
Dette er en matematisk sætning, som er let at bevise fra ovenstående defintion af XOR. Man beviser den ved at afprøve den i alle kombinationsmuligheder |
Chapter 13: Grafiske brugergrænseflader i Java, del 2
Course home Author home About producing this web Previous lecture (top) Next lecture (top) Previous lecture (bund) Next lecture (bund)
Generated: March 31, 2008, 12:09:46