Michi: Buttons werden im Firefox nicht angezeigt, im IE schon

Hi,

woran kann es liegen, dass folgendes Applet im Eclipse und IE korrekt funktioniert, im Firefox jedoch nicht, was sich dadurch äußert, dass die Buttons (NORTH und SOUTH) nicht angezeigt werden, die Grafik dagegen schon:

___________________________________________________________________________

import java.applet.*;
import java.awt.*;

public class Stromkreis extends Applet
{
  Image MyImage;
  Canvas Grafik;

public void init()
  {
   this.setBounds ( 0, 0, 600, 600 );
   this.setLayout( new BorderLayout () );

Container buttonFrame1 = new Container ();
   buttonFrame1.setBounds ( 0, 0, 300, 300 );
   buttonFrame1.setLayout ( new FlowLayout () );

Container buttonFrame2 = new Container ();
   buttonFrame2.setBounds ( 0, 0, 300, 300 );
   buttonFrame2.setLayout ( new FlowLayout () );

Grafik = new ImgShowComponent ( "leitergrafik.gif" );
   this.add ( BorderLayout.CENTER, Grafik  );

String labeled1 = new String ( "Farbe wechseln 1" );
   Button click1 = new Button(labeled1);
   buttonFrame1.add ( click1 );

String labeled2 = new String ( "Farbe wechseln 2" );
   Button click2 = new Button(labeled2);
   buttonFrame2.add ( click2 );

this.add ( BorderLayout.NORTH, buttonFrame1 );
   this.add ( BorderLayout.SOUTH, buttonFrame2 );
   this.setVisible ( true );

}

}

___________________________________________________________________________

Einbindendes HTML:

<applet code="Stromkreis.class" width=899 height=460>
</applet>

___________________________________________________________________________

Gruß Michi

  1. Hallo,

    woran kann es liegen, dass folgendes Applet im Eclipse und IE korrekt funktioniert, im Firefox jedoch nicht, was sich dadurch äußert, dass die Buttons (NORTH und SOUTH) nicht angezeigt werden, die Grafik dagegen schon:

    Was ist ein ImgShowComponent? Mit einem leeren Canvas Grafik funktioniert Dein Applet bei mir in allen Browsern, die Java Applets unterstützen.

    viele Grüße

    Axel

    1. Hi Axel + Forumsteilnehmer,

      ein ImgShowComponent-Objekt liefert ein Canvas:
      ____________________________________________________________________

      import java.awt.*;

      public class ImgShowComponent extends Canvas
      {
        private Image img = null;

      ImgShowComponent( String sFile )
        {
          img = getToolkit().getImage( sFile );
          MediaTracker mt = new MediaTracker( this );
          mt.addImage( img, 0 );
          try { mt.waitForAll(); } catch( InterruptedException ex ) { }
        }

      public void paint( Graphics g )
        {
          g.drawImage( img, 0, 0, this );
        }

      public Dimension getPreferredSize()
        {
          return new Dimension( img.getWidth( this ), img.getHeight( this ) );
        }

      public Dimension getMinimumSize()
        {
          return getPreferredSize();
        }
      }
      ____________________________________________________________________

      Das funktioniert auch überall. Was dagegen nicht funktioniert, ist die Darstellung von Buttons im Firefox. Wie gibts das? Ist doch eigentlich Sache der VM und nicht des Browsers, oder eben nur sehr indirekt? :)

      Gruß Michi

      1. Hallo,

        ein ImgShowComponent-Objekt liefert ein Canvas:
        ____________________________________________________________________

        import java.awt.*;

        public class ImgShowComponent extends Canvas
        {
          private Image img = null;

        ImgShowComponent( String sFile )
          {
            img = getToolkit().getImage( sFile );

        ^und das verwendest Du als Objekt in einem Applet?

        Das funktioniert auch überall.

        Das glaube ich nicht. Zeige mal ;-).

        Was dagegen nicht funktioniert, ist die Darstellung von Buttons im Firefox.

        Doch, das funktioniert:

          
        import java.applet.*;  
        import java.awt.*;  
          
        public class Stromkreis extends Applet  
        {  
          Image MyImage;  
          Canvas Grafik;  
          
          public void init()  
          {  
           this.setBounds ( 0, 0, 600, 600 );  
           this.setLayout( new BorderLayout () );  
          
           Container buttonFrame1 = new Container ();  
           buttonFrame1.setBounds ( 0, 0, 300, 300 );  
           buttonFrame1.setLayout ( new FlowLayout () );  
          
           Container buttonFrame2 = new Container ();  
           buttonFrame2.setBounds ( 0, 0, 300, 300 );  
           buttonFrame2.setLayout ( new FlowLayout () );  
          
           Grafik = new ImgShowComponent (this, "Beispiel.jpg" );  
           this.add ( BorderLayout.CENTER, Grafik  );  
          
           String labeled1 = new String ( "Farbe wechseln 1" );  
           Button click1 = new Button(labeled1);  
           buttonFrame1.add ( click1 );  
          
           String labeled2 = new String ( "Farbe wechseln 2" );  
           Button click2 = new Button(labeled2);  
           buttonFrame2.add ( click2 );  
          
           this.add ( BorderLayout.NORTH, buttonFrame1 );  
           this.add ( BorderLayout.SOUTH, buttonFrame2 );  
           this.setVisible ( true );  
          
          }  
        }  
          
        class ImgShowComponent extends Canvas  
          {  
            private Image img = null;  
          
            ImgShowComponent(Applet a, String sFile )  
            {  
            img = a.getImage( a.getDocumentBase(), sFile );  
            MediaTracker mt = new MediaTracker( this );  
            mt.addImage( img, 0 );  
            try { mt.waitForAll(); } catch( InterruptedException ex ) { }  
            }  
          
            public void paint( Graphics g )  
            {  
              g.drawImage( img, 0, 0, this );  
              g.drawString( "Hallo Welt", 100, 100 );  
            }  
          
            public Dimension getPreferredSize()  
            {  
              return new Dimension( img.getWidth( this ), img.getHeight( this ) );  
            }  
          
            public Dimension getMinimumSize()  
            {  
              return getPreferredSize();  
            }  
        }  
        
        

        viele Grüße

        Axel

        1. Hi Alex,

          Das funktioniert auch überall.
          Das glaube ich nicht. Zeige mal ;-).

          Ok, stimmt, das hatte plötzlich nicht mehr funktioniert. *achselzuck*
          Allerdings wüsste ich nicht, dass ich noch etwas verändert und danach nicht mehr getestet habe, bevor ich den Quellcode veröffentlicht hab... :)

          Was dagegen nicht funktioniert, ist die Darstellung von Buttons im Firefox.
          Doch, das funktioniert:

          Bei mir funkt das auch nicht, bei Dir schon? :)

          Momentan schaut der Sourcecode mal so aus:

          Stromkreis.java:
          ___________________________________________________________________________
          import java.applet.*;
          import java.awt.*;

          public class Stromkreis extends Applet
          {
            Image MyImage;
            Canvas Grafik;

          public void init()
            {
             try
             {
             this.setBounds ( 0, 0, 600, 600 );
             this.setLayout( new BorderLayout () );

          Container buttonFrame1 = new Container ();
             buttonFrame1.setBounds ( 0, 0, 300, 300 );
             buttonFrame1.setLayout ( new FlowLayout () );

          Container buttonFrame2 = new Container ();
             buttonFrame2.setBounds ( 0, 0, 300, 300 );
             buttonFrame2.setLayout ( new FlowLayout () );

          Grafik = new ImgShowComponent (this, "leitergrafik.jpg" );
             this.add ( BorderLayout.CENTER, Grafik  );

          String labeled1 = new String ( "Farbe wechseln 1" );
             Button click1 = new Button(labeled1);
             buttonFrame1.add ( click1 );

          String labeled2 = new String ( "Farbe wechseln 2" );
             Button click2 = new Button(labeled2);
             buttonFrame2.add ( click2 );

          this.add ( BorderLayout.NORTH, buttonFrame1 );
             this.add ( BorderLayout.SOUTH, buttonFrame2 );
             this.setVisible ( true );
             }
             catch ( Exception e )
             {
              System.out.println ( e );
             }

          }
          }
          ___________________________________________________________________________

          Stromkreis.html:
          ___________________________________________________________________________
          <HTML>
          <BODY>
          <APPLET CODE=Stromkreis.class WIDTH=800 HEIGHT=800>
          </APPLET>
          </BODY>
          </HTML>
          ___________________________________________________________________________

          Im Eclipse und IE gehts wieder, während der Firefox sagt: "Fehler beim Laden des Java-Applets", allerdings erteilt der catch-Teil über System.out.println keine konkrete Auskunft dazu (was in Applets womöglich generell nicht gehen mag).

          Schönen Sonntag noch! ;)
          Michi

          1. Hallo,

            Ok, stimmt, das hatte plötzlich nicht mehr funktioniert. *achselzuck*

            Das konnte in einem normalen Applet aber nicht funktonieren, weil ein normales Applet eben nicht via getToolkit() an das Toolkit des Browserfensters kommt. Was ich gemacht habe (Applet.getImage() und Applet.getDocumentBase()) ist der gängige Weg von einem Applet an eine Image-Datei auf dem Server zu kommen.

            Bei mir funkt das auch nicht, bei Dir schon? :)

            Ja, genau so, wie ich den Code gepostet habe in einem Applet mit Stromkreis.class und unter Vorhandensein der ImgShowComponent.class. Das Bild muss dabei im selben Verzeichnis liegen, wie das HTML-Dokument, welches das Applet einbindet.

            allerdings erteilt der catch-Teil über System.out.println keine konkrete Auskunft dazu (was in Applets womöglich generell nicht gehen mag).

            Ja, das Applet kommt auch nicht an ein System.out, an welches auch? Aber es gibt ja die Java-Console. Wenn das Applet startet müsste im Windows-System-Tray (neben der Uhrzeit) eine dampfende Kaffeetasse erscheinen. Dort Rechtsklick drauf und "Konsole öffnen".

            Vorher solltest Du aber das try-catch mal entfernen, damit die korrekte Fehlermeldung dort ankommt.

            viele Grüße

            Axel

            1. Hi Axel,

              scheinbar hab ich hier ein Cache-Problem und nun auch in beiden Browsern. Nachdem ich nach einiger Zeit mal im Firefox "reload" geklickt hab, sind die Buttons auf einmal doch erschienen, obwohl ich seit dem letzten Posting hier wieder nichts mehr geändert hab. In beiden Browsern erscheinen damit also schon mal die Buttons.

              Daraufhin habe ich mal ein TextField eingefügt - nun erscheint das nicht, weder im Firefox NOCH im IE, im Eclipse allerdings schon...
              Hab in beiden Browsern auch einige Male reload geklickt, was aber bisher nichts gebracht hat. Komisch komisch. Hast Du eine Idee, woran das liegt? Hat das was mit dem Cache zu tun?

              Gruß Michi

              1. Aha...:  :)

                http://forum.de.selfhtml.org/archiv/2000/8/t19095/