Frage

Im Moment habe ich ein kleines Java-Programm, das Ich mag würde sowohl auf dem Desktop (dh in einem JFrame) und in einem Applet ausführen zu können. Derzeit werden alle der Zeichnung und Logik sind durch eine Klasse erweitert Leinwand behandelt. Das gibt mir ein sehr schönes Hauptmethode für die Desktop-Anwendung:

public static void main(String[] args) {
    MyCanvas canvas = new MyCanvas();
    JFrame frame = MyCanvas.frameCanvas(canvas);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    canvas.loop();
}

Kann ich etwas ähnliches für das Applet? Idealer MyCanvas würde die für beide Fälle gleich bleiben.

Nicht sicher, ob es ist wichtig, aber ich bin Zeichnung mit BufferStrategy mit setIgnoreRepaint(true).

Bearbeiten :. Um zu klären, mein Problem scheint die Leinwand zu malen - da alle Gemälde aus dem canvas.loop() Aufruf gemacht werden

War es hilfreich?

Lösung

Applet ist ein Container , nur hinzufügen Ihre Leinwand gibt.

Andere Tipps

Im Allgemeinen ist die Art und Weisen Sie eine Anwendung haben würden, die auch ein Applet ist Ihr Eintrittspunkt Klasse hat Applet erstrecken und deren Einrichtung die Leinwand selbst hinzufügen etc. etc.

Dann wird in der Haupt-Methode Version, die Sie gerade Ihre Applet-Klasse instanziiert und fügen Sie ihn in einem neuen Frame (oder JApplet / JFrame, etc.).

Siehe hier und hier Beispiele für die Technik, die (von dem ersten Beispiel) im wesentlichen darauf:

  public static void main(String args[])
  {
    Applet applet = new AppletApplication();
    Frame frame = new Frame();
    frame.addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent e)
      {
        System.exit(0);
      }
    });

    frame.add(applet);
    frame.setSize(IDEAL_WIDTH,IDEAL_HEIGHT);
    frame.show();
  }

Canvas ist ungeeignet für das Hinzufügen von Komponenten Swing. Verwenden JComponent statt (und setOpaque(true)).

Swing-Komponenten sollten immer auf dem AWT Event Dispatch Thread (EDT) manipuliert werden. Verwenden Sie java.awt.EventQueue.invokeLater (invokeAndWait für Applets). Sie sollten alle blockierenden Operationen aus dem EDT nicht tun, also Ihre eigenen Threads dafür starten. Standardmäßig Sie laufen im Hauptthread (oder Applet-Thread für Applets), die aus dem EDT ganz getrennt ist.

Ich schlage vor, um jegliche Abhängigkeit von Ihrem MyCanvas zu JFrame. Ich schlage vor, auch Code für Anwendungen getrennt zu halten mit Rahmen aus, dass die Verwendung Applets. Hinzufügen einer Komponente zu einem JApplet ist die gleiche wie für JFrame (in beiden Fällen ist es Blödsinn, wo eigentlich das, was passiert ist, dass add getContentPane().add tatsächlich aufruft, die einige unnötige Verwirrung verursachen kann). Der wesentliche Unterschied ist, dass Sie nicht ein Applet pack können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top