Rückgabewert eines gesamten Frames

Jens K

Mitglied
hallo,

ich habe hier ein Frame mit einem Eingabefeld und einem OK-Button:

Code:
public class NewJFrame extends javax.swing.JFrame {

    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("OK");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 345, Short.MAX_VALUE)
                    .addComponent(jButton1))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_jButton1ActionPerformed

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration//GEN-END:variables

}

Wie kann man jetzt das Programm ändern, sodass ich etwas in das Textfeld eingebe und die ganze Klasse als Rückgabewert den Inhalt des Testfeldes zurückgibt, sobald ich auf OK klicke.

gruss

Jens
 
Wie meinst du das genau?
Eine Klasse hat keinen Rückgabewert, sondern nur die Methoden der Klasse.

Wenn du willst, dass was passiert wenn der OK Button geklickt wird, dann musst du diesem Button einen Listener anhängen (z.B ActionListener) und dann halt in der entsprechenden Methode des Listeners (z.B. actionPerformed(ActionEvent e)) ausprogrammieren was geschehen soll.
 
hmm ok, kann ich vllt den gesamten Frame in eine Mehode umwandeln, der einen Rückgabewert hat?
ich möchte etwas eingeben und das dann ein string an eine andere Klasse zurückgegeben wird und dass sich der Frame dann schließt
 
Zuletzt bearbeitet:
Ich würde nicht versuchen etwas zurück zu geben, sondern den String der anderen Klasse über eine Set-Methode zu übergeben.
 
Ich würde es so machen:

Java:
public class NewJFrame extends javax.swing.JFrame {

    /** Creates new form NewJFrame */
    private NewJFrame() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("OK");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 345, Short.MAX_VALUE)
                    .addComponent(jButton1))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_jButton1ActionPerformed

private String getText() {
   return jTextField1.getText();
}

public static String requestText(){

   NewFrame frame = new NewFrame();
   frame.setVisible(true);
   return frame.getText();
}


    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                String text = NewJFrame().requestText();
                System.out.println(text);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration//GEN-END:variables

}

Allerdings solltest du für solche Dialoge nicht unbedingt nen JFrame sondern eher nen JDialog nehmen :)
 
das ist ja alles schön und gut, aber leider funktioniert es nicht. Das Frame wird geöffnet und das bleibt auch so. :confused: Der rückgabewert kommt nie an.
 
Hast du denn den Code von zeja 1 zu 1 übernommen?
Denn das war ja nicht fix fertig, sondern wohl eher als Hilfe gedacht, denke ich.

Dass das Frame aber beim klick auf OK geschlossen wird, musst du schon noch einbauen.
Denn wenn du mal in deinem Code die Methode jButton1ActionPerformed() anschaust (welche ja beim Klick auf OK aufgerufen wird), dann siehst du, dass diese im Moment noch nicht viel macht.

Nachdem diese Methode ausprogrammiert ist, sollte es aber klappen.
 
Ok sorry, habe mir das heute nochmals genauer angeschaut.
War wohl schon etwas spät gestern Abend...

Wenn du zusätzlich zu der Methode jButton1ActionPerformed(...) noch ein modaler JDialog aus deinem JFrame machst, dann läufts dann wirklich...
Oder muss es in deinem Fall zwingend ein JFrame sein?
 
hallo, also ich habe es mir mal mit dem jDialog angeschaut und ich denke ihr stimmt überein, wenn ich sage, dass es hier eigentlich sehr sinnvoll ist, denn der eigentliche Frame, der das Dialog dann aufruft wird dann angehalten. Kann ich dieses Beispiel dann so übernehmen? Ich weiß ich muss ja noch was bei der Methode für den JButton einfügen. Muss ich dann zum schließen:

Code:
System.exit(0);

oder

Code:
super.setVisible(false);

benutzen. Wie wäre es denn, wenn ich noch ein Abbrechen Button hätte.
 
Zurück