2.8 KiB
Tilstand og oppførsel – LineEditor
Oppgaven handler om en LineEditor-klasse, som håndterer data for redigering av en linje med tekst (altså tekst uten linjeskift).
LineEditor-klassen holder rede på en String-verdi og en tekstinnsettingsposisjon og har metoder for å redigere teksten. Tekstinnsettingsposisjonen er et heltall som angir hvor endringer skjer, tilsvarende en (blinkende) cursor som står mellom tegn. Verdien 0 tilsvarer foran første tegn, og høyeste mulige verdi er lengden på teksten, som tilsvarer at cursoren står bak siste tegn. Tilstanden er altså som følger:
text(enString-verdi) - teksteninsertionIndex- heltall som angir hvor i teksten redigeringer vil skje
Klassen har metoder med følgende oppførsel:
void left()- flytter tekstinnsettingsposisjonen ett tegn til venstre (tilsvarende bruk av venstre piltast)void right()- flytter tekstinnsettingsposisjonen ett tegn til høyre (tilsvarende bruk av høyre piltast)void insertString(String s)- skyter teksten angitt av argumentetsinn i teksten på tekstinnsettingsposisjonen og forskyver tekstinnsettingsposisjonen mot høyre tilsvarendevoid deleteLeft()- fjerner tegnet til venstre for tekstinnsettingsposisjonenvoid deleteRight()- fjerner tegnet til høyre for tekstinnsettingsposisjonenString getText()- Returnerer tekstenvoid setText(String)- oppdaterer teksten til å være den nye tekstenint getInsertionIndex- returnerer hvor i teksten redigeringer nå skjervoid setInsertionIndex(int)- oppdaterer hvor i teksten redigeringer skal skje
Java-kode
Skriv Java-kode for LineEditor-klassen med oppførsel som beskrevet over.
Lag en toString()-metode som viser teksten med tegnet '|' skutt inn på tekstinnsettingsposisjonen. Lag så en main-metode, slik at du kan sjekke at oppførselen stemmer med tilstandsdiagrammet (bruk samme start-tilstand og sekvens av kall).
Testkode for oppgaven finner du her: src/test/java/oving1/LineEditorTest.java.
Ekstraoppgave - frivillige utvidelser
- Legg til metoden
void insert(Object o), som skyter inn en tekstlig representasjon av objektetosom gis som argument. - Legg til metoden
void left(int n), som flytter tekstinnsettingsposisjonenntegn til venstre, og skriv omleft()til å bruke denne. Hva bør skje dersom tekstinnsettingsposisjonen er mindre ennn? - Legg til metoden
right(int n), som flytter tekstinnsettingsposisjonenntegn til høyre, og skriv omright()til å bruke denne. Hva bør skje dersom det er færre ennntegn til høyre for tekstinnsettingsposisjonen? - Utvid tilstanden og legg til metoder for å håndtere markering av region, tilsvarende bruk av shift og piltaster i en vanlig teksteditor. Husk at også de eksisterende metodene må endres til å håndtere dette riktig.