Appletproblem



  • Du versuchst Applets das selbe Verhalten aufzurücken wie einer Visual Basic- oder Delphi-Form. Leider geht das so nicht. Wenn du im ersten Code (deinem Hauptprogramm) also irgendetwas hinzufügen möchstest, solltest du ein JPanel nehmen und es über add() dem Container (deinem Applet) hinzufügen. Wenn es unbedingt ein eigenes Fenster sein soll muss dein "zweites Applet" eine von JFrame abgeleitete Klasse sein. Du erhälst dann ein Fenster-Objekt welches du anzeigen bzw. ausblenden lassen kannst.



  • Vielen dank, ich habe zwar nie Delphi oder VB programmiert aber ich dachte das geht so. 😃
    (Ich dachte alles was von Applet abgeleitet ist createt automatisch Controls in das Applet und ich muss da nichts mehr angeben 😉 )

    Alles soll in einem Fenster bleiben.

    Was hälst du davon das JPanel protected zu machen und OptionForm von MainForm abzuleiten?

    Noch ein Problem hätte ich, warum hängt der Browser wenn ich controls hide?



  • Master_Max schrieb:

    Was hälst du davon das JPanel protected zu machen und OptionForm von MainForm abzuleiten?

    Keine sehr gute Idee. Deine OptionForm sollte umbenannt werden in OptionPanel und von javax.swing.JPanel abgeleitet sein. In der MainForm kannst du dann ein OptionPanel instantiieren und es der MainForm über add einfügen.

    Master_Max schrieb:

    Noch ein Problem hätte ich, warum hängt der Browser wenn ich controls hide?

    Wie drückt sich dies genau aus? Welche VM verwendet dein Browser?



  • CengizS schrieb:

    Keine sehr gute Idee. Deine OptionForm sollte umbenannt werden in OptionPanel und von javax.swing.JPanel abgeleitet sein. In der MainForm kannst du dann ein OptionPanel instantiieren und es der MainForm über add einfügen.

    Hmmm, ich weiß nicht, denn ich habe mehrere Menüs.
    Was findest du an dem Design schlecht? :p
    Ich habe ein protected JPanel in MainForm und
    alle anderen Forms werden von MainForm abgeleitet und greifen auf das Panel zu.

    Wie drückt sich dies genau aus? Welche VM verwendet dein Browser?

    Egal wo, in der Applet ansicht von Eclipse, im IE oder im JBuilder.
    Der Browser bleibt hängen und wenn ich ihn minimiere und dann wieder maximiere,
    werden erst die Buttons gelöscht.

    Hmmm, deine Design Idee ist auch gut, ich werde mal beides implementieren und nehmen was mir besser gefällt. 😋



  • Also, wenn ich´s überdenke ist deine Design Idee um einiges besser.
    Leider bekomme ich´s nicht ganz gebacken, so habe ich´s versucht.

    MainForm.java

    import java.applet.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class MainForm
    extends Applet
    {
     private JButton TestVocButton;
     private ActionListener OnTestVocButton;
     protected  JPanel p;
    
     public MainForm()
     { 
       // Extra diesmal im Hauptprogramm damit mit dem Eventhandler nichts schief gehen kann
      OptionPanel op = new OptionPanel();
      /* Hier mit gehts auch nicht:
      p = new JPanel();
      p.add(op);*/
      }
    
    }
    

    OptionPanel.java

    import java.applet.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class OptionPanel
    extends JPanel{
    	private JButton BackButton;
    	private ActionListener OnBackButton;
    
    	public OptionPanel(){
    		 add(BackButton=new JButton("Back"));
    
    		 OnBackButton = new ActionListener() {
    		      public void actionPerformed( ActionEvent e ) {
    			  hideForm();
    		      MainForm f = new MainForm();
    		      }
    		  };
    		  BackButton.addActionListener(OnBackButton);
    	}
    	private void hideForm(){
    		BackButton.hide();
    	}
    
    }
    

    Kannst du mir sagen wie du´s gemeint hast?
    (Ich vermute ich brauche noch einen Context etc. ?)

    Vielen dank im voraus.



  • In deinem Applet musst du schreiben:

    public MainForm()
     { 
       // Extra diesmal im Hauptprogramm damit mit dem Eventhandler nichts schief gehen kann
      OptionPanel op = new OptionPanel();
      this.getContentPane().add(op);
      }
    


  • Mir scheint es so als würde getContentPane nicht in Applets gehen,
    das habe ich auch schon versucht (Noch einmal so wie du, ohne erfolg).
    Wenn ich meine Hauptklasse von JFrame erben lasse, bekomme ich keinen Fehler. Sicher das es so gehen muss?

    Vielen dank im voraus.



  • Ja sorry mein Fehler 🙂 Applet ist bereits ein Panel und kein Frame - eigentlich logisch 🙄 - aber egal.

    Sag einfach this.add(op); und dann klappts auch.



  • 😕
    Bisher dachte ich immer, wenn man Swing-Steuerelemente in Applets verwenden will, muss man es von JApplet ableiten. 😕



  • Muss nicht soviel ich weiss wäre aber zu empfehlen. Generell sollte man keine Lightweight- und Heavyweight-Komponenten mixen - insofern hast du recht.


Anmelden zum Antworten