# Applet mit Grafik und Darstellungsfunktionen



## malkasten (30. Jul 2004)

Hallo, 

zunächst möchte ich sagen, dass ich auf diesem Gebiet der Java-Programmierung neu bin. Manche Fragen werden Euch, erfarenen Programmierern,  sicherlich einfach vorkommen.
So, jetzt mein Anliegen:
Ich möchte ein Applet entwickeln, das einen Graphen darstellen kann. Die Darstellung wird durch Eingaben von x-und y-Koordinaten aus Textfeldern ermöglicht. Jetzt möchte ich generell wissen, auf welcher Komponente ich die Grafik darstellen kann. Ich habe mir gedacht "Canvas" aber das Applet besteht aus Swing-Komponenten, deshalb vielleicht nicht  von Vorteil. Dann "JPanel", aber weiß nicht ob es überhaupt darauf darzustellen ist.

Die nächste Option, die ich programmieren möchte ist die Möglichkeit, Grafikabschnitte, die mit der Maus markiert wurden, vergrößert darzustellen. Hierbei fehlt mir der Ansatz.

Würde mich freuen wenn Ihr mir hierbei helfen würdet. Danke im Vorraus.


----------



## Roar (30. Jul 2004)

1. ja du kannst auf ein JPanel zeichnen. du muss t dann eine eigene klasse schreiben ( z.B. JGraphPanel) die von JPanel erbt. dann musst du die methode paintComponent() überschreiben, und nicht wie bei AWT paint()

2. zum vergößern: du kannst deinem JPanel einen MouseMotionListener hinzufpgen mit dem du abfängst wenn ein rechteck auf den JPanel selektiert wurde. dann holst du dir die kordinaten und lässt dir daraus ein bild erstellen welches du dann vergrößern kannst. so würde ich das jedenfalls machen. oder du zeichnest den graphen danach ganz neu, aber halt größer....


----------



## deusful (11. Aug 2004)

ich möchte ebenfalls auf einen panel zeichen. bin allerdings anfänger und stelle mich noch etwas duslig an.
hab die panel methode überschireben, allerdings verstehe ich den sinn dahinter nicht ganz so und es funzt auch nicht:
hier mein code:
	
	
	
	





```
class JGraphPanel extends JPanel{
  public void paintComponents(Graphics g ){
  g.drawLine(2,2,2,2);
  }
}
```

ich möchte jetzt zum beispiel auf einen button drücken und dann die linie darstellen. allerdings müsste ich ja dann ein graphikobjekt übergeben. nur sage ich schon in der methode selber, das eine lini gezeichnet werden soll.
ich hab das gefühl, dass ich völlig auf dem holzweg bin, hat vielleicht jemand eine ahnung, wie ich die methode umschreiben muss oder wie der methodenaufruf gestaltet werden muss???

danke!


----------



## Roar (11. Aug 2004)

die methode paintComponent wird automatisch aufgerufen.

sicher dass die linie nicht gezeichnet wird? guck mal genau hin. oder mach sie ein bisschen größer. so is sie nur 2 pixel lang.. bissl kurz, oder?


----------



## Beni (11. Aug 2004)

Und vorallem solltest du eine Farbe für die Linie wählen :wink:


```
g.setColor( Color.RED );
g.drawLine( ... );
```


----------



## Roar (11. Aug 2004)

is das nich standartmäßig schwarz?


----------



## Beni (11. Aug 2004)

Glaub schon, aber vielleicht hat schon jemand das Graphics benutzt? (z.B. die update-Methode oder sonst so ein Fiesling der den Hintergrund zeichnet :wink: )


----------



## deusful (11. Aug 2004)

Ich habs nochmal getestet. Es passiert jedoch nichts! Hier noch mal mein Code, wenn du lust hast, kannst es testen!

```
public class Applet1 extends Applet {
  
  JGraphPanel jp1 = new JGraphPanel();
  ....
  private void jbInit() throws Exception {
    
    this.setBackground(SystemColor.text);
    this.setLayout(null);

    jp1.setBounds(new Rectangle(130, 56, 122, 145));
    jp1.setBackground(Color.Black);

    this.add(jp1, null);
  }
}
```
Und die zugehörige Klasse:

```
class JGraphPanel extends JPanel{
  public void paintComponents(Graphics g){
  g.setColor(Color.RED);
  g.drawLine(100,100,100,100);
  }
}
```

Bin mir nicht ganz sicher, welche Parameter für welche Angaben stehen? Ist doch zum einen die Position und zum anderen die Größe, oder? nur in welcher Reihenfolge?


----------



## Beni (11. Aug 2004)

Da fällt mir auf: Bei drawLine gibt man Anfangs- und Endpunkt ein. In deinem Fall hat die Linie eine Länge von 0...


----------



## deusful (11. Aug 2004)

auch wenn ich die Koordinaten änder, passiert nichts!


----------



## Beni (11. Aug 2004)

Hm, versuch noch folgendes: anstelle von "paintComponents" (mit s) überschreibst du die Methode "paintComponent" (ohne s). (Beide Methoden existieren, aber sie werden unter verschiedenen Bedingungen aufgerufen).


----------



## deusful (12. Aug 2004)

wieviel so ein "s" ausmachen kann.
jetzt funzt es, allerdings kann ich jetzt nicht mehr die hintergrund farbe von dem panel enstellen.


```
jp1.setDoubleBuffered(false);
    jp1.setBackground(Color.yellow);
    jp1.setBounds(new Rectangle(10, 10, 350, 250));
```

gibt es vielleicht auch eine Möglichkeit, dass was ich auf dem panel gemalt habe wieder zurück zu nehmen und die methode paintComponent(Graphics g) an einer anderen Stelle neu auf zu rufen?
oder kann man das panel einfach löschen und ein neues erstellen?

oder kann man das panel nur in der jbinit() initalisieren???


----------



## Beni (12. Aug 2004)

Sobald man die Methode "repaint" (des Panels oder des Frames) aufgerufen wird, wird das Panel neu gezeichnet. Damit ist auch das alte Bild gelöscht.


----------

