AWT In JPanel 2mal zeichnen

das-mo

Mitglied
Hi,
Ich probiere eine Anwendung zu programmieren, die ein Koordinatenkreuz und nacher einer Graphen darein zeichnet. Mein Problem ist jetzt: Wie kann ich, nachdem ich mit der Paint Methode das Koordinatenkreuz im Panel gezeichnet habe auch noch nachträglich den Graphen nach einem Buttonevent einzeichnen?

Java:
package linfunk;

import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.BasicStroke;
import java.awt.Color;

public class MyPanel extends JPanel{

  public void paint(Graphics g)
  {
    super.paint(g);
    Graphics2D g2 = (Graphics2D)g;

    BasicStroke kreuz= new BasicStroke(2.0f, BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);
    BasicStroke gitter= new BasicStroke(0.5f, BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);

    g2.setStroke(kreuz);
    g2.drawLine(250,0,250,500);
    g2.drawLine(0,250,500,250);
    g2.setFont(g2.getFont().deriveFont(15F));
    //g2.setFont(g2.getFont().deriveFont(1));
    g2.drawString("0", 255, 265);
    g2.setFont(g2.getFont().deriveFont(15F));

    for(int i = 1; i < 20; i += 1)
    {
      int x = -10 +i;
      g2.setStroke(kreuz);
      g2.setColor(Color.black);
      g2.drawLine(i*25, 240, i*25, 260);
      g2.drawLine(240, i*25, 260, i*25);
      g2.setStroke(gitter);
      g2.setColor(Color.LIGHT_GRAY);
      g2.drawLine(i*25, 0, i*25, 500);
      g2.drawLine(0, i*25, 500, i*25);
      if ( x != 0)
      {
        g2.setColor(Color.black);
        g2.drawString("" + x, i * 25 - 5, 280);
        g2.drawString("" + x, 220, 500-(i * 25 - 5));
      }

    }
    repaint();

  }

}

Das Buttonevent befindet sich in der Klasse vom Frame.

das-mo
 
na du musst doch nur die daten (bildpunkte) des graphen malen und optional durch eine linie verbinden. wenn du keinen graphen hast, gibt es auch keine zu zeichnenden daten. diese daten kannst du ja dynamisch zeichnen lassen, mit einer schleife oder iterator über der datenmenge.

bei 0 daten = kein durchlauf
 
Ich glaube es ging um den Punkt, an dem viele sind, und die dann irgendwann über die "böse Funktion" (getG...) stolpern und einfach verwenden... :autsch:

Allgemein: Bei JComponents überschreibt man paintComponent. In diesem Fall würde man z.B. das Malen des Kreuzes in eine eigene Methode packen, der Übersicht halber, und dann noch eine zweite Methode machen, um die Punkte zu malen. Die Punkte müssen dazu z.B. in einer Liste liegen, oder was auch immer da bei dir passt. Grob sowas wie
Java:
class MyPanel extends JPanel 
{
    private List<Point> points = ... // Add/removePoint-Methoden oder "setPoints" anbieten...
    
    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        paintAxes(g); // Im prinzip deine bisherige paint-Methode
        paintGraph(g); 
    }

    private void paintGraph(Graphics g)
    {
        // Alle Punkte aus "points" mit g.drawLine-Aufrufen verbinden...
    }
}

Und WICHTIG: NICHT in der paint-Methode "repaint" aufrufen - dann kommt er aus dem Zeichnen nicht mehr raus!
 

Zurück
Oben