Avatar billede roo104 Nybegynder
04. april 2003 - 16:47 Der er 9 kommentarer og
2 løsninger

Tegne streger ud fra objekter i en hægtet liste

Jeg har en hægtet liste som indeholder noder af typen Figur, som enten kan være et punkt, en streg, en trekant eller en firkant.
Klassen Firkant arver fra Trekant, som arver fra Streg, som arver fra Punkt som igen arver fra en arstract klasse Figur.
En streg har altså 1 koordinatsæt, en streg 2, en trekant 3 osv.
Jeg ville så gerne kunne låbe gennem den hægtede liste og så få den til at tegne ud fra de forskellige typer objekter. Det skal tegnes i en GUIl, fx med metoden drawLine().

Jeg håber i forstår hvad jeg mener, eler kan jeg ligge klasser til offentlig skue eller prøve at beskrive det lidt bedre.
Avatar billede disky Nybegynder
04. april 2003 - 16:54 #1
Øh hvorfor arver firkant fra trekant ? både trekant og firkant skulle vel arve fra streg ?

Alle disse klasse overloade en tegne metode som så specifikt kan tegne sig selv, eller via kald til super klassen kan tegne sig selv.
Avatar billede roo104 Nybegynder
04. april 2003 - 17:00 #2
Det er en opgave jeg har fået, hvor de skal arve fra hinanden, ved godt det ikke er det smarteste.
Så langt er jeg også nået frem selv, men det er mere hvordan jeg tegner, jeg kender ikke så meget til GUI.
Jeg arberjer lige på at få lagt klaserne lagt ud på nettet, så i kan se dem
Avatar billede disky Nybegynder
04. april 2003 - 17:02 #3
Hvis du f.eks. laver en applet, så er der en metode i applet'en der hedder paint()

Inde i den metode har du et graphics objekt, det kalder vi lige 'g'

Så kan du sige

g.drawLine(x1,y1,x2,y2);

Hvor x1,y1 er start position og x2,y2 er slut position.
Avatar billede roo104 Nybegynder
04. april 2003 - 17:07 #4
Her er list flere oplysninger.
jeg prøver lige at lave en paint metoden
Avatar billede roo104 Nybegynder
04. april 2003 - 17:08 #5
Avatar billede disky Nybegynder
04. april 2003 - 17:10 #6
Jeg har desværre ikke tid til at løse opgaven for dig, men jeg hjælper gerne med tvivlsspørgsmål
Avatar billede arne_v Ekspert
04. april 2003 - 17:22 #7
Du bliver nødt til at have en komplet tegne funktion for
hver objekt, fordi tegning af de figurer egner sig ikke til arv.
Avatar billede roo104 Nybegynder
04. april 2003 - 17:38 #8
hvad skal denne tegne funktion så indeholde ?
Avatar billede viht Nybegynder
07. april 2003 - 11:07 #9
Du kan også overveje at bruge Composite møsntret til at nærme sig det du ønsker:

Se et forslag her

http://jollerbarn.dk/download/composite.svg
http://jollerbarn.dk/download/composite.jpeg
http://jollerbarn.dk/download/composite.png

metoden draw(Graphics g) i CompositeFigure.java:

public void draw(Graphics g) {
  for(int i = 0; i < figures.size(); i++) {
      ((Figure)figures.get(i)).draw(g);
  }
}

metoden add(Figure figure) i CompositeFigure.java:

public void add(Figure figure) {
  figures.add(figure);
}

tegnemetoder er delegeret ned på de enkelte figurer (Information Expert):
draw(Graphics g) i Rektangel.java

public void draW(Graphics g) {
  Rectangle r = getRect();
  g.drawRect(r.x, r.y, r.width-1, r.height-1);
}

osv..
Avatar billede viht Nybegynder
07. april 2003 - 13:48 #10
draw metoden i abstractfigure vil være tom, da den jo ikke bør indeholde grafikimplementation. Den er blot interface candy.
Avatar billede roo104 Nybegynder
14. april 2003 - 17:43 #11
Jeg kan godt se hvad de mener viht, men kan ikke lige få det til at virke.
Jeg lukker her, men du får lidt for dit svar, da det var den måde jeg søgte, men nu er projektet afleveret uden draw metoder, så det er lige meget nu.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester