# Striche auf ein Panel zeichnen



## jes3000 (21. Mrz 2009)

Hallo,
ich würde gerne auf dem Panel im unten stehenden Programm mehrere Striche ausgeben
und weiß aber nicht wie ich das Programm mit
dem Graphics g und einer g.drawLine( 10, 10, 100, 50 ); verbinden kann.
Hat jemand eine Idee wie ich das machen könnte?
Viele Grüße Jes

[HIGHLIGHT="Java"]import java.awt.*;
import java.awt.event.*;

public class Test3 extends Frame {
 // Anfang Attribute
 private Panel panel1 = new Panel(null);
 // Ende Attribute

 public Test3(String title) {
  // Frame-Initialisierung
  super(title);
  addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent evt) { System.exit(0); }
  });
  int frameWidth = 549;
  int frameHeight = 433;
  setSize(frameWidth, frameHeight);
  Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  int x = (d.width - getSize().width) / 2;
  int y = (d.height - getSize().height) / 2;
  setLocation(x, y);
  Panel cp = new Panel(null);
  add(cp);
  // Anfang Komponenten

  panel1.setBounds(160, 40, 297, 217);
  cp.add(panel1);
  // Ende Komponenten

  setResizable(false);
  setVisible(true);
 }

 // Anfang Methoden
 // Ende Methoden

 public static void main(String[] args) {
  new Test3("Test3");
 }
}[/HIGHLIGHT]


----------



## hdi (21. Mrz 2009)

Also erstmal solltest du diese Initialisierungen:

[HIGHLIGHT="Java"]panel = new Panel(null);[/HIGHLIGHT]

weglassen.
Wenn du in einem Panel etwas zeichnen möchtest, solltest du die
paintComponent-Methode dieses Panels überschreiben.

D.h. du machst dir eine Klasse:

[HIGHLIGHT="Java"]class MyPanel extends Panel{

  public MyPanel(int xdim, int ydim){
      setPreferredSize(new Dimension(xdim,ydim));
  }

  @Override
  public void paintComponent(Graphics g){
       super.paintComponent(g);

       // hier malst du, zB g.drawLine(...)
  }
}[/HIGHLIGHT]

und dein Frame hat dann als Attribut so ein Teil:

[HIGHLIGHT="Java"]private MyPanel panel;[/HIGHLIGHT]

im Konstruktor des Frames erzeugst du eine Instanz und legst sie aufs Frame:

[HIGHLIGHT="Java"]this.panel = new MyPanel(500,500);
this.add(this.panel);
this.pack();
[/HIGHLIGHT]

Mit dem Aufruf von

[HIGHLIGHT="Java"]this.panel.repaint();[/HIGHLIGHT]

kannst du die paintComponent-Methode ausführen lassen.
(Man ruft sie nicht direkt auf!)


----------



## icarus2 (21. Mrz 2009)

Vielleicht hilft dir diese kleine Beispiel ein bisschen:


```
import java.awt.*;
import javax.swing.*;

public class ZeichenTest extends JFrame {
  Container c;
  ZeichenPanel zp;
  
  //Konstruktor
  ZeichenTest() {
    c = getContentPane();
    
    zp = new ZeichenPanel();
    
    c.add(zp);
  }
  
  public static void main(String[] args) {
    ZeichenTest fenster = new ZeichenTest();
    fenster.setTitle("Zeichentest");
    fenster.setSize(500,500);
    fenster.setVisible(true);
    fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

//ZeichenPanel wird von JPanel abgeleitet
class ZeichenPanel extends JPanel {
  @Override
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    
    g.drawLine(50,50,150,80);
  }
}
```

*Edit: Gibts hier ein automatisches Syntaxhighliting?


----------



## hdi (21. Mrz 2009)

Ja du musst nur schauen dass du den Code in Java-Code Tags packst.
Es gibt im Menu beim Posten 4 verschiedene Code-Tags.


----------



## jes3000 (23. Mrz 2009)

habe es nun hinbekommen...
vielen Dank für die schnelle Hilfe


----------

