awt: paint Methode zeigt nichts an

seb2369

Mitglied
Ich habe soeben den Versuch gestartet einen Plotter, der mir den Graph von quadratischen Funktionen grafisch zurückgibt, zu programmieren.

Jedoch scheitere ich im Moment noch an der void paint(Graphics g){} methode.
Dabei ist NICHT das mathematische Konzept das Problem, sondern das zeichnen eines striches, bzw Punktes selbst. Bei mir bleibt das ganze Fenster weiß, egal ob ich den hintergrund manuell ändere oder nicht.
Ich vermute, dass das Problem am LayoutManager liegt(ich will ihn aber verwenden), lasse mich aber gerne eines besseren belehren 🙂
Muss ich diese explizit aufrufen oder genügt es sie einfach unter dem Konstruktor zu implementieren?
hier der code:
Java:
package awt.plotter;

import java.awt.Button;
import java.awt.Canvas;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;

public class MyWindow extends Frame {
    Frame frame;
    Label l1;
    Label l2;
    Label l3;
    Button b1;
    TextField t1;
    TextField t2;
    TextField t3;
    Panel panel;
    Canvas canvas;

    MyWindow() {
        frame = new Frame("GraphPlotter");
        frame.setSize(800, 800);

        l1 = new Label("f(x)= ");
        l2 = new Label(" x^2 + ");
        l3 = new Label(" x + ");

        t1 = new TextField("1");
        t2 = new TextField("2");
        t3 = new TextField("3");

        b1 = new Button("Plot");
        frame.setVisible(true);

        frame.setLayout(new FlowLayout());

        frame.add(l1);
        frame.add(t1);
        frame.add(l2);
        frame.add(t2);
        frame.add(l3);
        frame.add(t3);
        frame.add(b1);

    }

    public void paint(Graphics g) {
        g.drawLine(300, 200, 100, 100); // Macht nichts
        g.fillRect(10, 10, 300, 300); // ist auch im "Hintergrund"??
    }
}
die main ruft dann
MyWindow plotter = new MyWindow();
auf.


Ich danke euch im voraus für eure hilfe
Lg
 
Du machst lediglich die Frame-Instanz "frame" sichtbar. Die ist aber ein ganz normaler Frame ohne überschriebene paint-Methode.
Damit du die Zeichenoperationen in deiner MyWindow-Klasse siehst, müsstest du in der main
Java:
plotter.setVisible()
aufrufen.
Dann kannst du aber die Instanzvariable "frame" aus MyWindow löschen, ansonsten ist es nur verwirrend.
 
gut, erstmal danke für deine schnelle antwort.

Ich habe jetzt wie du gesagt hast plotter.setVisible in meiner main untergebracht und das frame.setVisible (aus MyWindow) gelöscht.
Nun wird mir aber nur mehr das ergebnis der paint methode auf den bildschirm angezeigt nachdem ich das fenster selbst auf die gewünschte größe gebracht habe; die ganzen labels, textfelder, der button und die eingestellte fenstergröße sind nicht mehr vorhanden. Muss ich jetzt evtl den layoutmanager auf visible stellen? wenn ja- wie?

Gibt es in java die möglichkeit den graph komplett von den labels und textfeldern innerhalb meines 800x800 fensters zu trennen? wie?

ps: wie ihr vermutlich heraushört, bin ich recht neu in der welt von java, bitte daher -wenn möglich- ganz präzise und einfache antworten posten 😉

Anbei noch ein bild zur visualisierung so wie ich es mir in etwa vorstelle
 

Anhänge

  • plotter.png
    plotter.png
    8,7 KB · Aufrufe: 34
Hallo,

deine Kalsse MyWindow erbt von JFrame und hat ein Member frame von der Klasse JFrame. Da kommst du wharscheinlich schon durcheinander und solltest dich für eine Möglichkeit entscheiden.
Außerdem solltest du setVisible(true) erst ganz am Ende aufrufen, wenn du alle "Teile" zu deinem JFrame hinzugefügt hast.
 
kann mir denn keiner das programm so herrichten, dass ich mit der paint methode unterhalb der koordinatenangabe (wie im bild sichtbar) zeichnen kann?
 
Du solltest nie von einem Top-Level-Container (Frame, JFrame, JWindow) ableiten, um eigene Zeichenroutinen zu implementieren, und du solltest auch kein reines AWT mehr verwenden. Leite stattdessem von JComponent oder JPanel ab, überschreibe paintComponent(Graphics g) und zeichne dort. Dann kann du deine "Zeichenkomponente" zusammen mit anderen Gui-Komponenten in einen normalen JFrame packen und den dann layouten.
Ein Beispiel findest du hier: https://www.java-forum.org/thema/arraylist-rectangles2d.138049/page-3#post-914036
 

Zurück
Oben