Hoi!
Ik heb op het moment een redelijke paint functie geschreven, waarbij even niet moet worden gelet op de methodes die ik hanteer ( ik ben ook maar een beginner ). Ik zal eerst de paintfunctie eens geven:
Deze functie tekent op het moment cirkels en als ik ellipsen wil plaatsen maak ik gebruik van 2 punten. Deze paint tekent daarom ook een lijn van punt 1 naar de positie van de muis op dat moment (om de richting van de ellipse te bepalen ( het scherm wordt dus telkens gerefreshed bij beweging )). De ellipsen zelf teken ik overigens nog niet! Dit omdat wanneer ik 10 cirkels heb in een Vector ik deze elke keer dat ik repaint deze teken, dus ook wanneer ik de muis beweeg. Dit maakt de applicatie echter redelijk sloom als je bedenkt dat ik straks misschien meer dan 10 cirkels ga tekenen én ook nog ellipsen.. (en misschien nog wel meer figuren in de toekomst).
Ik zat dus te denken aan het 'opsplitsen' van de tekenfunctie, zodat ik alleen die functie aanroep die op dat moment actief moet zijn. Daarbij wil ik echter wel de rest wat op dat moment niet gerefreshed hoeft te worden op het scherm laten staan...
Ik teken overigens op een JPanel waarop ik eerst een image open voordat ik daarop ga tekenen. Deze image moet ten alle tijden zichtbaar blijven.
Iemand een idee hoe ik dit 'moet gaan / het beste kan' aanpakken?
Ik heb op het moment een redelijke paint functie geschreven, waarbij even niet moet worden gelet op de methodes die ik hanteer ( ik ben ook maar een beginner ). Ik zal eerst de paintfunctie eens geven:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| public void paint(Graphics g) { super.paint(g); Point p1 = null; if (scaleMeasurer != null) { g.setColor(Color.cyan); Iterator iter = scaleMeasurer.getPoints(); while (iter.hasNext()) { Point p = (Point)iter.next(); g.fillOval((int)p.getX()-5, (int)p.getY()-5, 10, 10); if (p1 != null) { g.drawLine((int)p1.getX(),(int)p1.getY(), (int)p.getX(), (int)p.getY()); if (layout.menuItemIsSaveScaleEnabled() == false) { layout.menuItemSetSaveScaleItemState(true); } } else { p1 = p; layout.menuItemSetSaveScaleItemState(false); } } } if (placeCircleAps != null) { int scale = (int)layout.returnScale(); Iterator iterCircle = placeCircleAps.getPoints(); while (iterCircle.hasNext()) { primColor = Color.LIGHT_GRAY; alphaColor = new Color(primColor.getRed(), primColor.getGreen(), primColor.getBlue(), 98); g.setColor(alphaColor); Point pCircle = (Point)iterCircle.next(); g.fillOval((int)pCircle.getX()-((scale * figureSettings.getAttribute ("Circle_width")) / 2), (int)pCircle.getY()-((scale * figureSettings.getAttribute("Circle_height")) / 2), (scale * figureSettings.getAttribute("Circle_width")), (scale * figureSettings.getAttribute("Circle_height"))); g.setColor(Color.BLACK); g.drawOval((int)pCircle.getX()-((scale * figureSettings.getAttribute ("Circle_width")) / 2), (int)pCircle.getY()-((scale * figureSettings.getAttribute("Circle_height")) / 2), (scale * figureSettings.getAttribute("Circle_width")), (scale * figureSettings.getAttribute("Circle_height"))); } } if (placeEllipseAps != null) { int scale = (int)layout.returnScale(); Iterator iterClickedForEllipse = placeEllipseAps.getClickPoints(); while (iterClickedForEllipse.hasNext()) { pEllipse = (Point)iterClickedForEllipse.next(); g.setColor(Color.CYAN); g.fillOval((int)pEllipse.getX()-2, (int)(pEllipse.getY()-2), 5, 5); try { Point mousePosition = placeEllipseAps.getMousePosition(); g.drawLine((int)pEllipse.getX(), (int)pEllipse.getY(), (int) mousePosition.getX(), (int)mousePosition.getY()); } catch (NullPointerException npe) { System.out.println(npe.getMessage()); } } } } |
Deze functie tekent op het moment cirkels en als ik ellipsen wil plaatsen maak ik gebruik van 2 punten. Deze paint tekent daarom ook een lijn van punt 1 naar de positie van de muis op dat moment (om de richting van de ellipse te bepalen ( het scherm wordt dus telkens gerefreshed bij beweging )). De ellipsen zelf teken ik overigens nog niet! Dit omdat wanneer ik 10 cirkels heb in een Vector ik deze elke keer dat ik repaint deze teken, dus ook wanneer ik de muis beweeg. Dit maakt de applicatie echter redelijk sloom als je bedenkt dat ik straks misschien meer dan 10 cirkels ga tekenen én ook nog ellipsen.. (en misschien nog wel meer figuren in de toekomst).
Ik zat dus te denken aan het 'opsplitsen' van de tekenfunctie, zodat ik alleen die functie aanroep die op dat moment actief moet zijn. Daarbij wil ik echter wel de rest wat op dat moment niet gerefreshed hoeft te worden op het scherm laten staan...
Ik teken overigens op een JPanel waarop ik eerst een image open voordat ik daarop ga tekenen. Deze image moet ten alle tijden zichtbaar blijven.
Iemand een idee hoe ik dit 'moet gaan / het beste kan' aanpakken?
[ Voor 9% gewijzigd door Verwijderd op 17-11-2003 12:54 ]