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