Videregående programmering i Java

Dag 2 - Lave grafiske komponenter

Java2D - avanceret grafikmanipulering

Programmere egne komponenter (Javabønner)

Læsning: VP 4.1-4.6, VP 5

Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

Valgfrie emner

2D-grafik

Figurer

2D-grafik

(prøv det)

Java2D – demo

Prøv selv demo i jdk1.4/demo/jfc/Java2D/Java2Demo.jar

Kursusopgave

Runde i plenum

Hvad kunne du tænke dig at lave projektopgave om?

Er du åben over for flere deltagere?

Diskussion to og to

Udfærdige/diskutere krav til hvert projekterne

Diskutere mulige teknologier

Diskutere om eksisterende (Open Source-)projekt kan danne udgangspunkt eller komponent herfra kan hjælpe

Hjemmeopgave fra sidste gang:

Beskriv din ide til kursusopgave (10-30 linier)

Kursusopgave

Kursusopgaver

Hønsespil - Ebbe

Regnskabssystem m flere brugerflader - Kim J

Yatzy for flere spillere - Ratha

Regelbaseret produktkonfigurator - Michael C

Styring af astronomisk kiggert (prototype t afg.proj) - Mikael M

Generere .h-filer og dokumentation fra database - Michael K

Netværksovervågningsværktøj: Nødstrømsanlæg, tavler - Peter

Forudsige farten af en sejlbåd (empirisk/modelforsøg) - Kim H

Visuel GIS-konfiguratioseditor (XML) - Christian

Racerbilspil over netværket(!) - Thomas og Haris

Grafisk overvågning af driftsdata - Carl

Rapportkonvertering/håndtering? - Anders og Atle

Visuel formel-editor (a la Word) - Preben

Regnskabssystem - Mikala

JBuilder og projekter

Tjek at projektet forventer kildetekst det rigtige sted!

Tjek stierne i projektet

Åbn "Project Properties"

Kildekode i src/

.class-filer i classes/

Sti på .java-fil = src/ + pakke

Spørgsmål I gerne skulle stille
- heller før end siden

I forbindelse med diverse forsøg med bønner er jeg rendt i i nogle problemer.

Jeg fik lavet en 'gentagtekst' bønne og fik den også frem i et vindue. Dog først efter en del problemer, som nok i høj grad skyldes manglende overblik over den præcise sammenhæng mellem projekter, pakker og klasser samt hvor de forskellige filer ligger/skal ligge.

I bogen skriver du at JBuilder kræver at en bønne er en del af en pakke. Når jeg skal udpege stien til biblioteket skal jeg tilsyneladende kun udpege stien til og med ......projektnavn\classes. Jeg skal ikke medtage selve pakkenivauet. Skal pakken altid hedde VP?

Jeg kan også konstatere at jeg skal bruge make/rebuild for at få oversat koden (ikke så mærkeligt), men hvad er egentlig forskellen på make og rebuild? ... og vælger jeg make project.jpx betyder det så at alle klasser i projektet oversættet, og kan jeg vælge en enkelt med make class.java?

Når jeg har lavet et en rettelse i koden til bønnen slår den umiddlebart igennem når jeg bruger klassen, det er jo logisk nok. Når jeg har tilføjet en ny metode kan jeg ikke se den nye metode, før jeg har fjernet bønnen fra mit bibliotek og så tilføjet den igen. Det kan jeg forsåvidt godt se en vis logik i, biblioteket skal jo vide at der er en ny metode, men er der ikke en mere direkte måde at få opdateret denne information på?

Jeg kunne tænke mig at lave et projekt hvor jeg samlede flere bønnedefinitioner, det kan vel godt lade sig gøre?

Endelig har jeg en del problemer når jeg vil 'hugge' den færdige kode fra bogens eksempler. Jeg mindes noget tilsvarende fra de indledende Java-kursus, men nu kunne jeg godt tænke mig at forstår det lidt bedre. Der bliver tilsyneladende trukket en del information med om hvor klasser etc. ligger, information der ikke passer når man har flyttet koden ind i et nyt projekt. Hvad kan man gøre for at slette den forkerte information?

Komponentbaseret udvikling

Grafiske komponenter

import java.awt.*;

public class GrafiskVindue extends Frame

{

Label labelHvadErDitNavn = new Label();

TextField textFieldNavn = new TextField();

public GrafiskVindue() {

try {

jbInit();

}

catch(Exception e) {

e.printStackTrace();

}

}

private void jbInit() throws Exception {

labelHvadErDitNavn.setText("Hvad er dit navn?");

labelHvadErDitNavn.setBounds(new Rectangle(15, 69, 108, 15));

textFieldNavn.setText("Jacob");

textFieldNavn.setBounds(new Rectangle(141, 61, 112, 29));

this.setLayout(null);

this.add(textFieldNavn, null);

this.add(labelHvadErDitNavn, null);

}

public void paint(Graphics g)

{

g.drawLine(0,0,50,50);

g.fillOval(5,20,300,30);

g.setColor(Color.green);

String navn = textFieldNavn.getText();

for (int i=0; i<50; i=i+10)

g.drawString("Hej "+navn+" !",100+i,30+i);

}

}

Interfaces

Hændelser - genereret af værktøj

import java.awt.*;

public class GrafiskVindue extends Frame

{

Button buttonOpdater = new Button();

TextArea textAreaHilsen = new TextArea();

...

private void jbInit() throws Exception {

...

buttonOpdater.setLabel("opdater!");

buttonOpdater.setBounds(new Rectangle(231, 60, 91, 32));

buttonOpdater.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent e) {

buttonOpdater_actionPerformed(e);

}

});

textAreaHilsen.setText("Her kommer en tekst...");

textAreaHilsen.setBounds(new Rectangle(6, 102, 316, 78));

this.add(textAreaHilsen, null);

this.add(buttonOpdater, null);

}

void buttonOpdater_actionPerformed(ActionEvent e) {

String navn = textFieldNavn.getText();

System.out.println("Opdater! navn="+navn);

textAreaHilsen.setText("Hej kære "+navn);

repaint(); // gentegn vinduet, så paint() bliver kaldt

}

...

}

Karakteristika ved javabønner

Videregående programmering i Java

Præsentatoner fra kurset

2004-08-30T12:23:21