JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac.

necyi

Mitglied
Hallo!

Ich hab das Problem, dass ein Code in Windows ohne Fehler funktioniert und beim Aufruf in dem Grafikfenster gezeichnet wird.
Habe denselben Code auf Mac ausgeführt, aber es wird leider im Grafikfenster nichts angezeigt oder gezeichnet.
Hab auf beiden Betriebssystemen IntelliJ zum Ausführen benutzt. Ich habe es auch mit Eclipse etc. versucht aber ohne Erfolg.
Habe schon mehrmals mit Grafiken auf meinem MacBook gearbeitet und da gab es bisher keine Probleme.

Kann mir da vielleicht einer helfen?

Hier der Code:

Java:
import static jsTools.Graph.*;

public class Aufgabe21 {

    static void addArrowInt (double x1, double y1, double x2, double y2, String col) {
        int cx1 = (int) x1;
        int cy1 = (int) y1;
        int cx2 = (int) x2;
        int cy2 = (int) y2;

        addArrow(cx1, cy1, cx2, cy2, col);
    }

    static void paintFunction (double xmin, double xmax, int scale) {
        final int x0 = 400;
        final int y0 = 500;


        addArrowInt(x0, y0, x0, y0-(xmax*xmax), "black");
        addArrowInt(x0,y0,x0+(xmax*scale), y0, "black");

        for (int i= (int) xmin; i < xmax; i++) {
            addArrowInt(x0+(i*scale), y0-(i*i), x0+((i+1)*scale), y0-((i+1)*(i+1)),"blue");
        }
    }
    public static void main(String args[]) {
        initWindow();
        paintFunction(-20,20,10);
    }
}

So sieht es in Windows aus:

1650817454268.png

Also, keine Probleme.

Auf Mac leider so:

Screenshot 2022-04-24 at 18.24.55.png
 
Dann würde ich an deiner Stelle mal den Prof fragen. Wenn hier niemand zufällig genau diese Bibliothek kennt (was bei sowas meist unwahrscheinlich ist), kann da leider niemand helfen.
 
Ganz spontan würde ich sagen, dass sehr wohl gezeichnet wird, das Fenster danach aber (nochmal) initialisiert wird - oder aber es wird überhaupt erst am Bildschiem angezeigt, wenn paintFunction() schon vorbei ist. Die Anbindung von AWT ans System mag am Mac anders sein.

Start das Ding mal unter Windows und ändere danach die Fenstergröße. Ist die Zeichnung noch da?

paintFunction() rufst du nämlich in dem gezeigten Codeteil nur einmal bei Programmstart auf.
Normalerweise muss "manuelles" Zeichnen in die paintComponent-Methode der Komponente, auf der angezeigt wird, damit die Linien jedesmal neu gezeichnet werden, wenn die Komponente aktualisiert wird.

Java:
var panel = new JPanel() {

  @Override

  public void paintComponent(Graphics g) {
     super.paintComponent(g);
     doWhateverABusyBeeDoes(g);
  }
};

Edit: Hab gerade erst geseehn, dass paintFunction gar nicht selbst zeichnet, sondern die Linien erstellt, aber das Problem könnte das gleiche sein, wenn auch die Zeichenmethode eine andere ist.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben