Chapter 13
Grafiske brugergrænseflader i Java, del 2

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 

AWT

Swing

Forholdsvis begrænset udvalg af brugergrænseflade elementer

Mere fyldigt udvalg af brugergrænseflade elementer

'Look and feel' afhænger af den platform, AWT afvikles på

'Look and feel' kan vælges uafhængig af den underliggende platform

Reference

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

Look and feel betegner et bestemt udseende i samspil med bestemte interaktionsmønstre i en brugergrænseflade

'Look and feel' kan fastlægges programmatisk, via en egenskabsfil i et bestemt katalog, eller pr. default

  • Understøttede 'look and feels':

    • Cross platform (metal) look and feel

      • På alle platforme

    • Windows look and feel

      • Pt. kun på Windows platformen

    • Motif look and feel

      • På alle platforme

    • Mac

      • Kun på Macintosh platformen

References

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

Reference


Brugergrænseflade komponenter i Swing

Komponenter i Swing
Slide Note Contents Index
References 

Komponentbegrebet i Swing svarer begrebsligt til komponenter i AWT

For at kunne kende forskel starter Swing komponenter alle med bogstavet J

  • Roden i Swing komponenthierarkiet hedder JComponent

    • Klassen JComponent indeholder fælles egenskaber for alle Swing brugergrænseflade komponenter

    • Swing klasserne er placeret i en Java pakken javax.swing

    • JComponent arver fra java.awt.Container, som arver fra java.awt.Component

  • Ligesom i AWT er en konkret brugergrænseflade en aggregering af komponenter

    • Ydre komponenter kaldes containere

    • Dette hierarki afspejler hvordan en bestemt brugergrænseflade er opbygget af dele og helheder

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.


References

Oversigt over top-niveau containere i Swing
Slide Note Contents Index
References 

Enhver Swing brugergrænseflade komponent skal direkte eller indirekte være en del af en top-niveau container

Top-niveau containerne i Swing arver direkte fra de tilsvarende AWT komponenter, og kan derfor ikke være JComponents

Top-niveau containere har en række panes, af hvilke contents pane, som er en JComponent, er særlig vigtig

  • Top-niveau containere:

    • JFrame: Applikationer med en GUI har mindst én Frame

    • JDialog: Specialiserede og forudprogrammerede dialoger

      • Mange standard dialoger er let tilgængelige via statiske metoder i klassen JOptionPane

    • JApplet: Swing Applets

Man kan tilføje en MenuBar til en top-niveau container

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.

Det er let at konvertere applikationer fra AWT til Swing, hvis AWT og Swing understøtter de samme begreber

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.
/user/normark/courses/prog1/prog1-01/sources/java/division/application/DivModApplication.java

Program: Kalkulator applikationen i Swing. Vi har fremhævet forandringerne i forhold til AWT programmet vist ovenfor. De røde fremhævninger viser egentlige forandringer i programmet. De blå fremhævninger viser ændringer af AWT navne til Swing navne.
/user/normark/courses/prog1/prog1-01/sources/java/division/swing/DivModApplication.java

Exercise 13.1. Kalkulatoren i SwingSidste 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.

References

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.

Det er vanskeligere at konvertere applikationer, hvis der er et misfit mellem AWT og Swing begreberne

Program: Swing udgave af farveblanderen. Vi har fremhævet forandringerne i forhold til AWT programmet fra forrige lektion.
/user/normark/courses/prog1/prog1-01/sources/java/farver-swing/swing-applikation/ColorApplication.java

  • Komponenter i eksemplet, som er anderledes i Swing end i AWT:

    • JSlider i stedet for Scrollbar

    • ColorBlop er en JPanel i stedet for en Canvas

Eksemplet egner sig godt til at illustrere forskellen mellem de forskellige 'look and feels' som understøttes af Swing

Reference

Menuer i Swing
Slide Note Contents Index
References 

En Menu er en MenuItem, som igen er en knap (AbstractButton)

Menu popper op (ruller ned, ekspanderes) når knappen aktiveres

I modsætning til AWT er en Menu en komponent (JComponent) i Swing


Dette er en delvis gentagelse af dele af komponenthierarkiet (fra en tidligere slide) som har noget med menuer at gøre.

References

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).
import java.awt.*;
import java.awt.event.*;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.ButtonGroup;
import javax.swing.JMenuBar;
import javax.swing.KeyStroke;
import javax.swing.ImageIcon;

import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JFrame;

/*
 * This class exists solely to show you what menus look like.
 * It has no menu-related event handling.
 */
public class MenuLookDemo extends JFrame {
    JTextArea output;
    JScrollPane scrollPane;

    public MenuLookDemo() {
        JMenuBar menuBar;
        JMenu menu, submenu;
        JMenuItem menuItem;
        JCheckBoxMenuItem cbMenuItem;
        JRadioButtonMenuItem rbMenuItem;

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        //Add regular components to the window, using the default BorderLayout.
        Container contentPane = getContentPane();
        output = new JTextArea(5, 30);
        output.setEditable(false);
        scrollPane = new JScrollPane(output);
        contentPane.add(scrollPane, BorderLayout.CENTER);

        //Create the menu bar.
        menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        //Build the first menu.
        menu = new JMenu("A Menu");
        menu.setMnemonic(KeyEvent.VK_A);
        menu.getAccessibleContext().setAccessibleDescription(
                "The only menu in this program that has menu items");
        menuBar.add(menu);

        //a group of JMenuItems
        menuItem = new JMenuItem("A text-only menu item",
                                 KeyEvent.VK_T);
        //menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead
        menuItem.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_1, ActionEvent.ALT_MASK));
        menuItem.getAccessibleContext().setAccessibleDescription(
                "This doesn't really do anything");
        menu.add(menuItem);

        menuItem = new JMenuItem("Both text and icon", 
                                 new ImageIcon("images/middle.gif"));
        menuItem.setMnemonic(KeyEvent.VK_B);
        menu.add(menuItem);

        menuItem = new JMenuItem(new ImageIcon("images/middle.gif"));
        menuItem.setMnemonic(KeyEvent.VK_D);
        menu.add(menuItem);

        //a group of radio button menu items
        menu.addSeparator();
        ButtonGroup group = new ButtonGroup();

        rbMenuItem = new JRadioButtonMenuItem("A radio button menu item");
        rbMenuItem.setSelected(true);
        rbMenuItem.setMnemonic(KeyEvent.VK_R);
        group.add(rbMenuItem);
        menu.add(rbMenuItem);

        rbMenuItem = new JRadioButtonMenuItem("Another one");
        rbMenuItem.setMnemonic(KeyEvent.VK_O);
        group.add(rbMenuItem);
        menu.add(rbMenuItem);

        //a group of check box menu items
        menu.addSeparator();
        cbMenuItem = new JCheckBoxMenuItem("A check box menu item");
        cbMenuItem.setMnemonic(KeyEvent.VK_C);
        menu.add(cbMenuItem);

        cbMenuItem = new JCheckBoxMenuItem("Another one");
        cbMenuItem.setMnemonic(KeyEvent.VK_H);
        menu.add(cbMenuItem);

        //a submenu
        menu.addSeparator();
        submenu = new JMenu("A submenu");
        submenu.setMnemonic(KeyEvent.VK_S);

        menuItem = new JMenuItem("An item in the submenu");
        menuItem.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_2, ActionEvent.ALT_MASK));
        submenu.add(menuItem);

        menuItem = new JMenuItem("Another item");
        submenu.add(menuItem);
        menu.add(submenu);

        //Build second menu in the menu bar.
        menu = new JMenu("Another Menu");  
        menu.setMnemonic(KeyEvent.VK_N);
        menu.getAccessibleContext().setAccessibleDescription(
                "This menu does nothing");
        menuBar.add(menu);
    }

    public static void main(String[] args) {
        MenuLookDemo window = new MenuLookDemo();

        window.setTitle("MenuLookDemo");
        window.setSize(450, 260);
        window.setVisible(true);
    }
}


Reference

Popup menuer i Swing
Slide Note Contents Index
References 

En popup menu (JPopupMenu) er en komponent , som bringes til syne når et bestemt event forekommer på udvalgte andre komponenter

I Windows er et sådant event et højre muse klik på en menubærende komponent

Reference


Avancerede komponenter i Swing

Komponenten ColorChooser
Slide Note Contents Index
References 

Swing tilbyder en pre-defineret komponent, som gør det muligt at vælge en farve fra en palette

Komponenten er en avanceret variant af vores farveblander

Reference

Program: ColorChooserDemo fra The Java Tutorial. Vi har fremhævet de interessante steder i programmet i forhold til vore interesser.
/user/normark/courses/prog1/prog1-01/sources/java/tutorial-demos/color-chooser/ColorChooserDemo.java

Ovenstående eksempel stammer direkte fra The Java Tutorial

Tekst komponenter
Slide Note Contents Index
References 

Swing tilbyder en række forskellige komponenter, som kan 'modtage' tekst i interaktion med en bruger

Tekst komponenter spænder fra en simpel én liniers tekstfelt til fuldblods tekst editorer


Vi viser her det relevante udsnit af komponent hierarkiet, som specialiserer tekst komponenten JTextComponent i Swing

Reference

Andre avancerede Swing komponenter
Slide Note Contents Index
References 

Ud over de allerede behandlede komponenter undersøtter Swing yderligere avancerede komponenter

  • Andre avancerede Swing komponenter:

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

  • Events klassificeres i forskellige typer, som på en naturlig måde kan defineres i et klassehierarki

    • Eventklassehierarkiet: næste side

  • Java systemet genererer automatisk event objekter når brugeren interagerer på et brugergrænseflade element

    • Der genereres kun event objekter for de hændelser hvortil der er registreret 'listeners'

  • Events i Java kan klassificeres i to grupper: Lav og højniveau events

    • Højniveau events realiseres ved at håndtere lavniveau events

Reference

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 event objekt indeholder nyttig information, som karakteriserer den hændelse som objektet repræsenterer

  • Eksempler på information i forskellige slags event objekter

    • Brugergrænseflade objektet, som genererede hændelsen

      • via metoden getSource() fra EventObject klassen

    • Navnet på den kommando, hvorpå et ActionEvent indtraf

    • Værdien af en AdjustmentEvent

    • Identifikation af den tast, hvis aktivering udsender et KeyEvent

    • x, y posititionen i den brugergrænseflade komponent, hvorpå et MouseEvent indtraf

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 objektEn 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

  • En brugergrænseflade komponent kan tilknytte et Listener objekt, der får til ansvar at lytte til events af en bestemt type

  • Listener objekter implementerer et bestemt Java Interface som foreskriver hvilke hændelser objekterne skal håndtere

  • Listener objektet påvirker typisk model objektet, som igen (via observer mønstret) opdaterer sine syn

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)
class ColorListener implements ActionListener, AdjustmentListener {
  // Listens to events from components of a ColorPresenter

  private ColorPresenter presentation;
  private INColor currentColor;

  public ColorListener (ColorPresenter presentation){
    this.presentation = presentation;
  }

  public void actionPerformed(ActionEvent action){
    presentation.adjust();
  }

  public void adjustmentValueChanged (AdjustmentEvent adjustment){
    presentation.sliderAdjust((Scrollbar)adjustment.getAdjustable(), 
                              adjustment.getValue());
  }
} // end class ColorListener

References

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

Et listener objekt har ofte behov for kun at implementere én eller nogle få metoder i en listener interface

Java.awt.event pakken indeholder en såkaldt adapter klasser pr. interface, som implementerer interfacet med lutter tomme metoder

En klasse, som implementerer et listener interface, kan ofte med fordel arve fra en adaptor klasse

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
  public static void main(String[] args){
     Frame f = new Frame("Color adjuster");
     f.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent e) {
             System.exit(0);
           }
       } );
     ColorPresenter adjuster = new ColorPresenter();
     adjuster.init();
     f.add("Center", adjuster);
     f.pack();
     f.setVisible(true);
 } // end main

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 navnSingulæ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)
  static class WindowCloser extends WindowAdapter{
    public void windowClosing(WindowEvent e) {
       System.exit(0);
    }
  } // end WindowCloser

  public static void main(String[] args){
     Frame f = new Frame("Color adjuster");
     f.addWindowListener(new WindowCloser());
     ColorPresenter adjuster = new ColorPresenter();
     adjuster.init();
     f.add("Center", adjuster);
     f.pack();
     f.setVisible(true);
 } // end main

References


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 af grafiske figurer i AWT

    • Tegning foregår som regel på et canvas objekt - men kan også foregå direkte i en Applet

    • Det er metoden repaint, der forårsager gentegning af et canvas

      • Metoden repaint kalder update, som kalder paint

    • Vil man tegne må man definere paint (eller update)

    • Metoden paint modtager et object af typen Graphics som parameter

      • De egentlige tegne operationer foregår med metoder i klassen Graphics

    • Der opretholdes ingen repræsentation af tegningens bestanddele

      • Det er udelukkende Graphics objektets pixels der manipuleres

      • 'Painting' - ikke 'drawing'

Program: En simpel tegning på en Canvas i en Java applikation. Dette eksempel viser, hvordan de basale klasser Frame og Canvas samt metoden paint køres på banen for at kunne komme igang med at tegne. I klassen med main proceduren oprettes en instans af en klasse, som arver fra Canvas. Denne klasse kan hermed redefinere metoden paint, som vi jo har brug for, for at kunne tegne.
/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/CanvasDraw.java

Reference

Tegning i Swing
Slide Note Contents Index
References 

  • Tegning af grafiske figurer i Swing

    • Der findes ikke en JCanvas klasse i Swing

    • Enhver komponent kan understøttte 'custom painting'

      • Ofte bruger man JPanel til dette formål

    • Tegning udføres i metoden paintComponent fra JFrame

      • paintComponent får overdraget et Graphics object, hvorpå de egentlige tegneoperationer foregår

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.

Enhver komponent har sit eget koordinatsystem med (0,0) i øverste venstre hjørne

Figure. Illustration af en komponents koordinatsytem. Det farvede område viser udstrækningen af en komponent med bredden 'width' og højden 'height'.

  • Koordinatsystemet gælder også for containere, som indeholder andre komponenter

    • Metoden getLocation i klassen Component/JComponent returnerer komponentens placering i forældre komponentens koordinatsystem

    • Metoden getSize i klassen Component/JComponent returnerer komponentens dimensioner

References

Farver
Slide Note Contents Index
References 
Man kan naturligvis styre farverne af de elementer man tegner. Her ser vi kort på hvordan.

  • Klassen Color repræsenterer en farve i RGB farvemodellen

  • Metoderne setForeground, getForeground, setBackground og getBackground definerer hhv returnerer forgrunds- og baggrundsfarven af en Component/JComponent

  • Metoden setColor sætter tilstanden af et Graphics objekt, således at alle efterfølgende tegninger på objektet bliver lavet i den angivne farve

Program: En udgave af CanvasDraw som sætter tegnefarven. Den første linie og ovalen bliver tegnet med rødt (og vist med rødt i programmet). Så skifter vi farve, og den sidste linie bliver tegnet med en anden farve (som vist med den anden farve).
/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/CanvasDrawColor.java

References

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.

I normal tegnetilstand tegnes en figur med Graphics objektets angivne farve

I XOR tegnetilstand tegnes en figur med en farve der en kombination med 'baggrundsfarven' og figurens angivne XOR farve

  • I normal tegnetilstand overskrives den eksiterende tegning med et nyt bidrag

    • Det er ingen simpel mulighed for at få den oprindelige tegning tilbage

  • I XOR tegnetilstand kombineres den eksistende tegning med et nyt bidrag

    • Den tegnede farver er den eksistende farve xor'ed med med grafik objektets XOR farve

    • Hvis tegneoperationen gentages dukker den oprindelige tegning frem igen

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
aba XOR b
truetruefalse
truefalsetrue
falsetruetrue
falsefalsefalse
 

r XOR s XOR s = r

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


Collected references
Contents Index
Oversigt over AWT komponenter
The reference above goes to a lecture note pageThe reference above points to an earlier page in the lecture notes
Farveblander eksemplet (ændring af look and feel)
The reference above goes to a lecture note pageThe reference above points to an succeding page in the lecture notes
How to set the look and feel
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
Hvordan man sætter user interface manageren
The reference above goes to a lecture note pageThe reference above points to an succeding page in the lecture notes
Klassen javax.Swing.JComponent
The reference from above goes to Java API pageThe references above goes to material on the Internet
Komponenter i AWT
The reference above goes to a lecture note pageThe reference above points to an earlier page in the lecture notes
Visual Component index
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
Tilsvarende specialiseringshierarki i AWT
The reference above goes to a lecture note pageThe reference above points to an earlier page in the lecture notes
Metoden setMenuBar i Jcomponent
The reference from above goes to Java API pageThe references above goes to material on the Internet
How to use root panes
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
Using Top-level containers
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
How to convert from AWT to Swing
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
Div Mod calculator Applet
The reference above goes to a lecture note pageThe reference above points to an earlier page in the lecture notes
Farveblander applet Applet
The reference above goes to a lecture note pageThe reference above points to an earlier page in the lecture notes
How to use menus
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
Hele JComponent hierarkiet
The reference above goes to a lecture note pageThe reference above points to an earlier page in the lecture notes
Menuer i AWT
The reference above goes to a lecture note pageThe reference above points to an earlier page in the lecture notes
Menubegreber
The reference above goes to a lecture note pageThe reference above points to an earlier page in the lecture notes
The Java tutorial om menu eksemplet
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
Brining up a Popup Menu
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
How to use Color Choosers
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
Swing's text components
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
How to use file choosers
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
How to use trees
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
How to use tables
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
Events and eventhandling i Swing
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
Interfacet AdjustmentListener i pakken java.awt.event
The reference from above goes to Java API pageThe references above goes to material on the Internet
Interfacet ActionListener i pakken java.awt.event
The reference from above goes to Java API pageThe references above goes to material on the Internet
Farveblander eksemplet
The reference above goes to a lecture note pageThe reference above points to an earlier page in the lecture notes
Oversigt over indlejring klasser i klasser
The reference above goes to a lecture note pageThe reference above points to an earlier page in the lecture notes
Om nestede klasser fra The Java Tutorial
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
Klassen WindowAdapter i pakken java.awt
The reference from above goes to Java API pageThe references above goes to material on the Internet
Interfacet WindowListener i pakken java.awt
The reference from above goes to Java API pageThe references above goes to material on the Internet
Klassen Graphics i pakken java.awt
The reference from above goes to Java API pageThe references above goes to material on the Internet
Overview of custom painting
The reference above goes to a Java Tutorial pageThe references above goes to material on the Internet
Farveblander eksemplet
The reference above goes to a lecture note pageThe reference above points to an earlier page in the lecture notes
Metoden getSize i Component
The reference from above goes to Java API pageThe references above goes to material on the Internet
Metoden getLocation i Component
The reference from above goes to Java API pageThe references above goes to material on the Internet
Klassen Component i pakken java.awt
The reference from above goes to Java API pageThe references above goes to material on the Internet
Klassen Color i pakken java.awt
The reference from above goes to Java API pageThe references above goes to material on the Internet

 

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