Programutvikling V2015 — øvingsoppgaver for uke 18

Oppgave 1

Oppgaven går ut på å programmere en tabell - JTable - som lister opp en oversikt over noen bøker med tilhørende pris, slik følgende bilde av programmets brukergrensesnitt viser.

Tredje kolonne i tabellen indikerer om det sammen med boka følger en CD eller ikke. Data for tabellen kan leses inn fra tekstfila bokdata.txt. Første linje i denne inneholder en heltallsverdi som forteller hvor mange bøker fila inneholder data for. Videre er det for hver bok fire linjer i fila med denne struktur:
forfatter
tittel
cd eller ucd avhengig av om det følger med CD eller ikke
et desimaltall som angir pris

Det du trenger å vite om JTable-tabeller for å løse oppgaven finner du i notatet på nettadressen http://www.iu.hio.no/~evav/uvstoff/intro/tabell.html.

Det kreves ikke i denne oppgaven at du implementerer din egen tabellmodell. Du kan bruke en av konstruktørene som er omtalt i begynnelsen av det nevnte notatet. Som du ser av bildet, får dette blant annet den konsekvens at desimaltallene som angir pris ikke blir skrevet ut med to desimaler (med mindre andre desimal er forskjellig fra null og tredje desimal er lik null). Tabelldataene skal programmet lese inn fra den nevnte tekstfila. I utgangspunktet vil kolonnene i en tabell bli gitt samme bredde. I tabellen som er vist på bildet ovenfor er breddene justert ved bruk av metoden setPreferredWidth, slik det er forklart i det nevnte notatet.

Oppgave 2

Du får nå i oppgave å forbedre boktabellen fra oppgave 1 slik at prisene skrives ut med to desimaler. Dessuten skal det brukes en avkryssingsboks til å indikere om det følger med cd med boka eller ikke. Tabellen vil da kunne se ut som vist på følgende bilde.

For å få til dette, er det nødvendig å implementere en egen tabellmodell for tabellen, slik det er forklart i nevnte notat.

For å få til utskrift av desimaltall med to desimaler, må du for kolonner som inneholder Double-objekter definere en egen cellerendrer (på tilsvarende måte som det blir forklart i nevnte notat). Cellerendreren skal rendre cellene i form av en JLabel. Når du skriver inn vedkommende desimaltall i denne, må du bruke et DecimalFormat-objekt som er programmert til å gi to desimaler.

Løsningsforslag

Oppgave 1

Boktabell.java

Oppgave 2

Boktabell2.java
Boktabellmodell.java