Storleken på de objekt du lägger till kan bestämmas endera (enklast) genom att ge ett värde i ett textfält eller genom någon form av gummibandsteknik (roligare). Gummibandning går till så att man anger en punkt (centrum i vårt fall eftersom alla figurer beskrivs med en centrumpunkt och en storlek) genom att peka med muspekaren samt trycka ned en musknapp. När man sedan rör musen med knappen nedtryckt ändrar figuren storlek med hänsyn till muspekarens placering. När man släpper knappen bestämmer man slutgiltig storlek.
Appleten delas enklast in i två delar: en kommandopanel överst och själva
ritytan - den nuvarande appleten - under. Om man använder sig av appletens
default-layout-hanterare räcker det då att placera, med add()
,
en (subklass till) Panel
och en (subklass till)
Canvas
i själva appleten.
Kommandopanelen kan t.ex. bestå av en CheckboxGroup
för figurval,
en CheckboxGroup
för att välja mellan rita, ta bort eller flytta
och ett textfält för storleksangivelse.
Alternativt kan man använda sig av de olika musknapparna eller någon tangentbordsmodifierare (shift och ctrl) för att välja mod (rita, ta bort, flytta).
Om du vill kan du också lägga till möjligheten att välja att rita fyllda eller ofyllda figurer.
CheckboxGroup
i den officiella
dokumentationen. Enklast placerar du som sagt knapparna i en
Panel
med FlowLayout
.
Hur du använder en TextField
-komponent kan du också läsa i
den officiella
dokumentationen.
Observera att du inte behöver hantera händelser vare sig från
CheckboxGroup
eller TextField
. När något händer på
ritytan (MouseEvent
) kan du hämta status från
CheckboxGroup
m.h.a. getSelectedCheckbox()
och från
textfältet m.h.a. getText()
.
Om du vill använda dig av musknappar eller tangenter för de olika moderna (rita, ta bort, flytta) kan du göra på följande sätt i din händelsehanterare:
// // Musknapparna, shift-tangenten och ctrl-tangenten är bitar i ett ord // som man kommer åt med metoden getModifiers(). // public void mousePressed( MouseEvent ev) { if (ev.getModifiers() & ev.BUTTON2_MASK) { det var musknapp 2 } if (ev.getModifiers() & ev.BUTTON3_MASK) { det var musknapp 3 } if (ev.getModifiers() & ev.SHIFT_MASK) { shift var nedtryckt } if (ev.getModifiers() & ev.CTRL_MASK) { ctrl var nedtryckt } }Enklaste sättet att hantera lagringen av figurerna är nog att lagra dem i en
Vector
.
CheckboxGroup
används. I båda versionerna tas alla figurer bort
om man inte träffar (tillräckligt nära) mitten av en figur när "remove" är
vald. I version ett (med textfält) kan man flytta en figur direkt vid
skapandet medan version två ju ändrar storleken i stället.