Supportnet Computer

Supportnet / Forum / Anwendungen(Java,C++...)

Java: Objekte zeichnen in Canvas





Frage

Hallo. Soll für die FH als Aufgabe ein Programm erstellen, das verschiedene Objekte in ein Frame zeichnet. Unter anderem soll eine Canvas rein, auf die dann auch wieder gezeichnet werden soll. Jetzt hab ich gelesen dass man ne Canvas nicht direkt bekritzeln kann, sondern dass das über eine weitere Funktion angestoßen werden muss. Diese habe ich unter zeichneAufCanvas() geschrieben. Die Compilierung läuft durch, allerdings gibt mir die Eingabeaufforderung eine NullPointerException aus und das Frame wird nicht erstellt. Hier der Quelltext: import java.awt.* ; public class MyFrame extends Frame { Canvas c = new Canvas(); public MyFrame() { super("MyFrame") ; setLayout (new FlowLayout ()); c.setBackground(Color.yellow); c.setBounds(0,0,100,300); zeichneAufCanvas(); add(c); add (new Button("Button")); add (new TextField()); add (new Choice()); } public void zeichneAufCanvas(){ Graphics g = c.getGraphics(); g.drawString("Canvas",10,20); } public static void main(String[] args) { MyFrame ef = new MyFrame() ; ef.setSize(300, 300) ; ef.setVisible(true) ; }

Antwort 1 von semi

getGraphics() liefert null, solange das Ding noch nicht sichtbar ist.

Antwort 2 von mac241

Ähm danke, und wie schaff ich es dass es erst nach Initialisierung aufgerufen wird?

Antwort 3 von mr_x_hacker

Du könntest das setVisible(true) in den Konstruktor schreiben, oder zeichneAufCanvas() erst nach der Initialisierung und dem setVisible() in der main() aufrufen...

Ciao Sascha

Antwort 4 von semi

...oder auch die pain-Methode überschreiben.

import java.awt.* ;

public class MyFrame extends Frame
{
  class MyCanvas extends Canvas
  {
    public void paint(Graphics g)
    {
      super.paint(g);
      g.drawString("Canvas",10,20);
    }
  }

  Canvas c = new MyCanvas();

  public MyFrame()
  {
    super("MyFrame") ;
    setLayout (new FlowLayout ());
    c.setBackground(Color.yellow);
    c.setBounds(0,0,100,300);
    add(c);
    add (new Button("Button"));
  }

  public static void main(String[] args)
  {
    MyFrame ef = new MyFrame() ;
    ef.setSize(300, 300) ;
    ef.setVisible(true) ;
  }
}


Antwort 5 von mac241

Thanks, das hat mir geholfen.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: