Zeichnen in Panel

koddy013

Mitglied
Hallo,

ich brauche Hilfe beim darstellen von Grafik in einem Panel.
Als hintergrund habe ich eine JFrame mit einen JTabbedPanel.
In diesem JTabbedPannel habe ich mehrere Panel gegeben.
Eine davon heisst: ProfilPanelLinks.

die Methode für Zeichnen den Grafik in diese ProfilPanelLinks habe ich wie folgendes geschrieben.
Java:
    private void drawingLinksPanel(){
        AuswerteController auswerteController = new AuswerteController();        
        ProfilPanelLinks.setOpaque(true);
        ProfilPanelLinks.add(auswerteController);
        auswerteController.setVisible(true);
        auswerteController.repaint();
    }

und die Klasse AuswerteController habe ich wie folgendes geschrieben
Java:
public class AuswerteController extends JPanel {

    private List<MSPoints> mspoints = new ArrayList<MSPoints> ();

    @Override
    public void paint(Graphics g)
    {
        Graphics2D g2d = (Graphics2D)g;
        super.paint(g2d);
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setStroke(new BasicStroke(5));
        g2d.setColor(Color.blue);
        g2d.drawLine(0, 0, 100, 100);                                       // zum Testen
        for (int i = 0; i < mspoints.size(); i++)
        {
            g2d.draw((Shape) mspoints.get(i));
        }
    }
}

aber wenn ich diese Methode durchführen, kommt den Grafik nicht.
Ich versuche mit debuggen, aber dazu kriege ich den Fehler auch nicht. :(
Weiss ihr wo ich Fehler geschrieben habe?

Danke im voraus für jede Hilfe
 
Ich vermute folgendes:
Die paint-Methode wird aufgerufen, wenn ein Teil des Grafikbereiches (oder alles) neu gezeichnet werden muss/soll. Der entsprechende Bereich ist als invalid markiert (kann man auch per invalidate selber machen), und es wurde eine entsprechende Maske erstellt, innerhalb derer die Zeichenoperationen durchgeführt werden (Stichwort Clipping).
Du rufst die paint-Methode der Oberklasse auf. Diese führt ihre Zeichenoperationen aus und markiert den Bereich wieder als gültig. Dadurch hast du dann keinen Zeichenbereich mehr, auf dem deine Zeichen-Operationen wirken dürfen, denn dieser ist wieder geschützt.
Lösung 1: rufe die paint-Methode der Oberklasse nicht auf.
Lösung 2: Bevor die die paint-Methode der Oberklasse aufrufst, merke dir den Bereich, in dem gezeichnet werden darf; wahrscheinlich reicht ein clone()-Aufruf. Nachdem diese ihre Arbeit getan hat, markierst du den Bereich wieder als ungültig, führst deine Zeichen-Operationen durch, und markierst ihn danach wieder als gültig (validate()-Methode).

Wie gesagt, das ist eine 'Vermutung'. Ob es klappt, musst du selber ausprobieren.

Viel Erfolg!
 
Zurück