Zweites JFrame über Button öffnen



  • Hi Forum
    ich brauche Hilfe bei meinen JFrames, ich möchte ein zweites JFrame über ein Button öffnen, beide Frames haben eigene Klasse, und noch ne Frage: muß das zweite Frame eine main() Methode besitzen??? Das Zweite Frame heist Vorlage, und die Schaltfläche, der Button der den 2Frame öffnen soll heist cmdVorlage, dann hab ich es so versucht:
    So steht die Funktion im Frame1:

    void cmdVorlage_actionPerformed(ActionEvent e){
    // Aufruf des Frame2, ich dachte es geht so:
    v.show();
    // leider hab ich mich geirrt!!
    // auch v.setVisible(true);
    // hat nicht geholfen
    }

    Beim kompilieren gibt es keine Fahlermeldungen, und ich bin Anfänger, das sollte auch gesagt werden! 😞
    Danke
    Mirsad



  • Hast du vielleicht vergessen dem Button den ActionListener hinzuzufügen? Also um ein Fenster zu sehen reicht eigentlich schon der Aufruf zweier Methoden, JFrame(String title) und setVisible(boolean) dieser Klasse. Vielleicht hat sich ja ein Fenster geöffnet, und du hast es nicht gesehen weil es so klein war, da du vielleicht vergessen hast die Größe einzustellen. Oder es ist hinter einem anderen Fenster verborgen geblieben. Also in dem Fall musst du die anderen Fenster nich minimieren, du könntest es mit requestFocus() versuchen. Aber wie auch immer, wenn sich ein Fenster geöffnet hast, kannst du das ja unten in dieser Leiste sehen. Also wenn sich tatsächlich kein Fenster öffnet, denke ich, dass es an der Event-Verarbeitung liegen könnte.



  • Hallo Pogo
    danke für deine schnelle Antwort, ich glaube es liegt nicht an dem ActionListener, wenn ich System.out.print("Text"); eingebe und das dann über den Button aufrufe wird das dann brav ausgeführt:

    void cmdVorlage_actionPerformed(ActionEvent e){
    // Aufruf des Frame2, ich dachte es geht so:
    v.show();
    System.out.print("Text"); // wird normal ausgeführt
    // auch v.setVisible(true);
    // hat nicht geholfen
    }
    😕 wobei, jetzt als du das erwähnt hast, garnicht so sicher bin mit dem ActionListener, und jetzt ganz dumm, muß mein 2Frame auch eine main() besitzen?? Am besten ich poset denn ganzen code hier rein und lass nur das wesendliche 😕
    ich glaube ich poste mal mehr code hier rein 😞
    bis gleich 🙂



  • Hallo
    hier ist der Code, auszug natürlich, von den 2 Forms:

    package emailversand;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    /**
     * <p>Überschrift: </p>
     * <p>Beschreibung: </p>
     * <p>Copyright: Copyright (c) 2004</p>
     * <p>Organisation: </p>
     * @author unbekannt
     * @version 1.0
     */
    
    public class Email extends JFrame {
      JComboBox cboTrainer = new JComboBox();
      JLabel lblEmpfaenger = new JLabel();
    // und weitere JFrame Elemente, der JButton ist auch dabei!
    // dann die Vorlage Klasse als neue Instanz
      Vorlage vorlage = new Vorlage();
    
    // dann der Konstrucktor
    public Email() {
        try {
          jbInit();
        }
        catch(Exception ex) {
          ex.printStackTrace();
        }
      }
    
      void jbInit() throws Exception {
    // alle Elemente des ersten JFrame usw. ich glaube das ich das nicht posten
    // muß, die meisten könnens eh besser als Ich!  :) 
    // unter anderem auch diese Zeile:
       this.setBorder(100,100,400,200); //Größe!
    // ich habe weitere Elemente die hier nicht geschrieben sind
    // zum schluß
    // das sollte doch der ActonListener sein:
       cmdVorlage.addActionListener(new Email_cmdVorlage_actionAdapter(this));
    // usw.
       this.sow();
    }  // ENDE KONSTRUKTOR
    
     public static void main(String[] args) {
        Email email = new Email();
    
      }
    // dies funktioniert, ersetzePlatzhalter, ersetzt bestimmte Wörter in einem String
     void cmdVorschau_actionPerformed(ActionEvent e) {
        this.ersetzePlatzhalter();
      }
    // das Problem
      void cmdVorlage_actionPerformed(ActionEvent e) {
        // hier wird das Vorlagen Formular aufgerufen, zum erstellen von neuen Vorlagen
        vorlage.setVisible(true);
        vorlage.show();
      }
    }
    // FRAGE: IST DAS HIER DER BENÖTIGTE ACTIONLISTENER????
    class Email_cmdVorschau_actionAdapter implements java.awt.event.ActionListener {
      Email adaptee;
    
      Email_cmdVorschau_actionAdapter(Email adaptee) {
        this.adaptee = adaptee;
      }
      public void actionPerformed(ActionEvent e) {
        adaptee.cmdVorschau_actionPerformed(e);
      }
    }
    
    class Email_cmdVorlage_actionAdapter implements java.awt.event.ActionListener {
      Email adaptee;
    
      Email_cmdVorlage_actionAdapter(Email adaptee) {
        this.adaptee = adaptee;
      }
      public void actionPerformed(ActionEvent e) {
        adaptee.cmdVorlage_actionPerformed(e);
      }
    }
    

    Danke für eure Geduld!
    Mirsad

    Edit: Bitte Code-Tags nutzen - Danke!



  • Über die Klasse Vorlage hast du dich leider ausgeschwiegen 🙂 Wie sieht die denn aus? Evtl. sind da noch gar keine Elemente vorhanden und das Fenster ist so klein und im Hintergrund?



  • Hallo Cengiz
    hier die Klasse Vorlage, jetzt alles da die Klasse selber nicht groß ist:

    package emailversand;
    
    import javax.swing.*;
    import java.awt.*;
    import com.borland.dbswing.*;
    
    /**
     * <p>Überschrift: </p>
     * <p>Beschreibung: </p>
     * <p>Copyright: Copyright (c) 2004</p>
     * <p>Organisation: </p>
     * @author unbekannt
     * @version 1.0
     */
    
    public class Vorlage extends JInternalFrame {
      JButton cmdSave = new JButton();
      JLabel lblTitel = new JLabel();
      JTextField txtTitel = new JTextField();
      JScrollPane jScrollPane1 = new JScrollPane();
      JEditorPane txtNachricht = new JEditorPane();
      JLabel jLabel1 = new JLabel();
      JList lstPlatzhalter = new JList();
      JButton cmdEdit = new JButton();
      JButton cmdCancel = new JButton();
    
      public Vorlage() {
        try {
          jbInit();
        }
        catch(Exception ex) {
          ex.printStackTrace();
        }
      }
    
      void jbInit() throws Exception {
        cmdSave.setBounds(new Rectangle(432, 5, 95, 34));
        cmdSave.setText("Speichern");
        this.setClosable(true);
        this.setIcon(false);
        this.setIconifiable(true);
        this.setMaximizable(true);
        this.setTitle("Vorlage erstellen");
        this.setEnabled(true);
        this.getContentPane().setLayout(null);
    
        lblTitel.setText("Vorlage Titel:");
        lblTitel.setBounds(new Rectangle(6, 9, 65, 24));
        txtTitel.setText("");
        txtTitel.setBounds(new Rectangle(73, 9, 174, 24));
        jScrollPane1.setBounds(new Rectangle(8, 115, 362, 236));
        txtNachricht.setText("");
        jLabel1.setText("Text:");
        jLabel1.setBounds(new Rectangle(11, 90, 35, 19));
        lstPlatzhalter.setBounds(new Rectangle(381, 115, 148, 237));
        cmdEdit.setBounds(new Rectangle(431, 41, 95, 34));
        cmdEdit.setText("Edit");
        cmdCancel.setBounds(new Rectangle(432, 77, 95, 34));
        cmdCancel.setText("Abbrechen");
        this.getContentPane().add(jScrollPane1, null);
        jScrollPane1.getViewport().add(txtNachricht, null);
        this.getContentPane().add(jLabel1, null);
        this.getContentPane().add(txtTitel, null);
        this.getContentPane().add(lblTitel, null);
        this.getContentPane().add(lstPlatzhalter, null);
        this.getContentPane().add(cmdCancel, null);
        this.getContentPane().add(cmdEdit, null);
        this.getContentPane().add(cmdSave, null);
        this.setBounds(100,100,400,200);
        this.show();
      }
    
      public static void main(String[] args) {
       Vorlage vorlage1 = new Vorlage();
     }
    }
    

    Bitte melde auch ob ich in dieser Klasse die main() Methode brauche
    dake
    mirsad
    P.S. sorry, hab das mit den CODE Tags übersehen gehabt! ⚠



  • Ok danke.

    1. Du benötigst keine eigene main-Methode in deiner Vorlagen-Klasse. Das Anstoßen geschieht über die Erzeugung des Objekts und wird damit vom Konstruktor aus gesteuert.

    2. Das Problem das du hast ist das JInternalFrame. Das ist kein normales Fenster wie das JFrame sondern kann nur in etsprechenden Containern (JDesktopPane) angezeigt werden. JInternalFrames werden immer dann verwendet, wenn man sogenannte Multiple Document Interfaces (MDI) erzeugen möchte. Das was du bräuchtest um mittels setVisible(true) das Fenster anzeigen zu können ist eine Ableitung deiner Vorlage-Klasse von JFrame.



  • Hallo Cengiz
    danke jetzt gehts, ich wuste garnicht das mit dem unterschieden, JFrame und JInternalFrame, welcher von den zwei ist besser, eigendlich muß ich den JInternalFrame benutzen, aber da ich selber ein Anfänger bin darf ich mit den JFrame anfangen, und die ganze Anwendung wird dann später auf JInternalFrame überschrieben 🤡
    Danke
    Mirsad 👍


Anmelden zum Antworten