KVL logo

Java-oversigt del 2

Dette er del 2 af en kort oversigt over dele af Java. Denne del indgår ikke i pensum for kurset Databehandling. Oversigten består af følgende afsnit:

Del 1
1. Skelet til en Java applet 9. Komponenter i en applet
2. Et komplet eksempel på en applet 10. Hændelser og metoden action
3. Ordrer 11. Grafik og metoden paint
4. Udtryk og operatorer 12. Musehændelser og tastaturhændelser
5. Erklæringer 13. Konvertering mellem typer
6. Tegnstrenge 14. Læsning af flere tal fra en tegnstreng
7. Tabeller 15. Linievis læsning
8. Navne og nøgleord  
Del 2
16. Avancerede komponenter i en applet 18. Skelet til et Java-program
17. Layout af komponenter 19. Indlæsning fra fil eller tastatur

16. Avancerede komponenter i en applet

I Java-oversigtens del 1 vistes en række grundlæggende applet-komponenter; her er nogle mere avancerede komponenter.

ProgramtekstBetydningAnvendelse
Valg (Choice)
Choice forsendelse; Erklær en valgmenuerklæring
forsendelse = new Choice(); Opret valgmenuinit
forsendelse.addItem("Post Danmark");
forsendelse.addItem("Elektronisk post");
forsendelse.addItem("United Parcel Service");
Tilføj muligheder til valgmenuinit
add(forsendelse); Tilføj valgmenu til appletinit
forsendelse.getSelectedIndex(); Nummeret (0, 1, ...) på den valgte mulighed 
forsendelse.getSelectedItem(); Teksten i den valgte mulighed 
Afkrydsningsfelter (Checkbox)
Checkbox berltid, jylpost, pol; Erklær tre afkrydsningsfeltererklæring
berltid = new Checkbox("Berlingske Tidende");
jylpost = new Checkbox("Jyllands-Posten");
pol = new Checkbox("Politiken");
Opret afkrydsningsfelter med givne teksterinit
add(berltid);
add(jylpost);
add(pol);
Tilføj afkrydsningsfelter til appletinit
berltid.getState() Er feltet berltid afkrydset? 
Afkrydsningsfelter, gensidigt udelukkende (CheckboxGroup)
CheckboxGroup mk;
Checkbox mand, kvinde;
Erklær gruppe og afkrydsningsfeltererklæring
mk = new CheckboxGroup();
mand = new Checkbox("Mand", mk, false);
kvinde = new Checkbox("Kvinde", mk, true);
Opret gruppe og afkrydsningsfelter med givne teksterinit
add(mand);
add(kvinde);
Tilføj afkrydsningsfelter til appletinit
kvinde.getState() Er feltet kvinde afkrydset? 
Valgliste (List)
List lande; Erklær en valglisteerklæring
lande = new List(3, false); Opret valgliste med tre linierinit
lande = new List(3, true); Opret valgliste med flere samtidige valginit
lande.addItem("Sverige"); lande.addItem("Tyskland"); lande.addItem("Frankrig"); lande.addItem("Kenya"); lande.addItem("Vietnam"); Tilføj muligheder til valglisteinit
add(lande); Tilføj valgliste til appletinit
lande.getSelectedItems() De valgte muligheder (som tabel af tegnstrenge) 

17. Layout af komponenter

Hvis man bare tilføjer komponenter til en applet med add, så vil komponenternes placering (layout) afhænge af applettens størrelse og andre tilfældige forhold. Man kan derfor ikke være sikker på at alle brugere ser det samme layout, og resultatet vil sandsynligvis forekomme rodet.

For at få ensartet layout bruger man en `layout-manager'. De mulige layout-managere er null, BorderLayout, CardLayout, FlowLayout, GridBagLayout, GridLayout.

FlowLayout()
Standard layout-manager. Komponenterne tilføjes fra venstre-højre og oppefra-ned, som der nu er plads til. Komponenterne centreres i hver række. Eksempel FlowEks.java:
    setLayout(new FlowLayout());
    add(new Button("komponent1"));
    add(new Button("komponent2"));
    add(new Button("komponent3"));
    add(new Button("komponent4"));
    add(new Button("komponent5"));
GridLayout(r, s)
Inddeler appletten i r rækker og s søjler. Komponenterne tilføjes fra venstre-højre og oppefra-ned, sådan at de første s komponenter kommer i øverste række, de næste s komponenter i næstøverste, osv. Eksempel GridEks.java med 2 rækker og tre søjler:
    setLayout(new GridLayout(2,3));
    add(new Button("komponent1"));
    add(new Button("komponent2"));
    add(new Button("komponent3"));
    add(new Button("komponent4"));
    add(new Button("komponent5"));
BorderLayout()
Komponenternes placering bestemmes ved at verdenshjørne angives i kaldet til add. Verdenshjørnerne angives med "North", "East", "South", "West", "Center". Eksempel BorderEks.java:
    setLayout(new BorderLayout());
    add("South", new Button("komponent1"));
    add("North", new Button("komponent2"));
    add("East", new Button("komponent3"));
    add("Center", new Button("komponent4"));
    add("West", new Button("komponent5"));
Manuelt (absolut) layout
Komponenternes placering bestemmes ved et kald reshape(x, y, width, height), hvor (x, y) er koordinaterne for komponentens øverste venstre hjørne, width er komponentens bredde, og height dens højde. Alle angivelser er i pixels. Dette giver fuld kontrol over layoutet, men resultatet er dårligt hvis f.eks. koordinaterne falder uden for det område der er afsat til appletten. Eksempel NoLayoutEks.java:
    komp1 = new Button("komponent1");
    komp2 = new Button("komponent2");
    komp3 = new Button("komponent3");
    komp4 = new Button("komponent4");
    komp5 = new Button("komponent5");
    
    setLayout(null);
    add(komp1); komp1.reshape(0, 15, 100, 30);
    add(komp2); komp2.reshape(200, 15, 100, 30);
    add(komp3); komp3.reshape(0, 200, 100, 30);
    add(komp4); komp4.reshape(200, 200, 100, 30);
    add(komp5); komp5.reshape(300, 150, 100, 30);

18. Skelet til et Java-program

Et Java-program adskiller sig fra en applet ved ikke at køre i et allerede eksisterende vindue. Vi skal ikke betragte egentlige Java-programmer i kurset Databehandling. Et Java-program med navnet Klasse skal findes i en fil Klasse.java, og skal indeholde en metode kaldet main, erklæret på denne måde:

   public class Klasse
   {
     public static void main ( String[] args )
     {
       ...
     }

     ...
   }

Metoden main kaldes når programmet startes. Parameteren args er en tabel (array) af de strenge som programmet fik som argumenter da det blev startet.

19. Indlæsning fra fil eller tastatur

Hvis man vil læse fra en tekstfil "tal.dat" på disken (kun muligt i et egentligt Java-program), så gør man som ved læsning af flere tal fra en tegnstreng. Blot skal man erstatte linie 1 og 2 i opskriften med følgende:

   InputStream istroem = new FileInputStream("tal.dat");

Dette siger at indstrømmen istream skal tages fra filen "C:\Brugere\tal.dat" på disken. I dette tilfælde skal man angive throws IOException, FileNotFoundException i den omgivende metode. Bemærk at skråstreger i et filnavn såsom C:\Brugere\tal.dat (under MS Windows) skal fordobles når de skrives i Java-tegnstrenge: "C:\\Brugere\\tal.dat".

Hvis man vil læse direkte fra tastaturet (i et egentligt Java-program), så skal man i stedet erstatte linie 1 og 2 i opskriften med følgende:

   InputStream istroem = System.in;

Dette siger at indstrømmen istream skal tages fra System.in, også kaldet standard input, som normalt er tastaturet.

Dette dokument er
http://www.dina.kvl.dk/~sestoft/databehandling/java2.html

Tilbage til Databehandlings hjemmeside

Peter Sestoft, Databehandling 1998, 1997-05-21, 1998-04-02