2017-04-26 6 views
-1

Ich möchte eine Zeichenfolge fileName aus dem Textfeld enterFileName zurückgeben, wenn ich die Taste saveFileNameBtn drücke. Ich habe versucht, den Text in einem inline action listener method zu bekommen, aber wenn ich das tue, ist die Variable außerhalb des Bereichs, wenn ich versuche, es zurückzugeben.Wie gebe ich einen String aus einem Textfeld zurück, wenn die Taste gedrückt wird?

String getSaveFileName() 
{ 
    JFrame enterFileNameWin = new JFrame(); 
    JPanel fileNameP = new JPanel(); 
    enterFileNameWin.add(fileNameP); 
    JLabel fileNamePrompt = new JLabel("Enter a name for the file"); 
    TextField enterFileName = new TextField(20); 
    JButton saveFileNameBtn = new JButton("Save"); 

    fileNameP.add(fileNamePrompt); 
    fileNameP.add(enterFileName); 
    fileNameP.add(saveFileNameBtn); 

    enterFileNameWin.setVisible(true); 
    enterFileNameWin.setSize(300, 100); 

    String fileName = enterFileName.getText(); 
    fileName = fileName + ".dat"; 

    saveFileNameBtn.addActionListener((ActionListener) this); 

    return fileName; 
} 

Dies funktioniert nicht, da Dateiname außerhalb des Gültigkeitsbereichs liegt und nicht zurückgegeben werden kann.

String getSaveFileName() 
{ 
    JFrame enterFileNameWin = new JFrame(); 
    JPanel fileNameP = new JPanel(); 
    enterFileNameWin.add(fileNameP); 
    JLabel fileNamePrompt = new JLabel("Enter a name for the file"); 
    TextField enterFileName = new TextField(20); 
    JButton saveFileNameBtn = new JButton("Save"); 

    fileNameP.add(fileNamePrompt); 
    fileNameP.add(enterFileName); 
    fileNameP.add(saveFileNameBtn); 

    enterFileNameWin.setVisible(true); 
    enterFileNameWin.setSize(300, 100); 

    saveFileNameBtn.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      String fileName = enterFileName.getText(); 
      fileName = fileName + ".dat"; 

     } 
    }); 
    return fileName; 
} 

Antwort

0
saveFileNameBtn.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent ae){ 
     String textFieldValue = enterFileName.getText(); 
     // call another function or do some operations 
    } 
}) 
0

Sie können den fileName Variable außerhalb der Action Klasse definieren und dann die OuterclassName.this Syntax verweisen. Da ich nicht weiß, wie der Name Ihrer Klasse lautet, ersetzen Sie Outerclass durch diesen Namen.

String getSaveFileName() { 
    //your other code... 
    String fileName; 
    saveFileNameBtn.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent ae) { 
      Outerclass.this.fileName = enterFileName.getText(); 
     } 
    }); 
    return fileName; 
} 

Wenn Sie 8 Java verwenden, könnten Sie sogar den Code weiter mit Lambda-Ausdrücke für die Anonymous Action Klasse vereinfachen. (Ohne Berücksichtigung der final Ausgabe) Accessing Variable within JButton ActionListener

:

String getSaveFileName() { 
    //your other code... 
    String fileName; 
    saveFileNameBtn.addActionListener(e->{ Outerclass.this.fileName = enterFileName.getText(); }); 

    return fileName; 
} 

Ein ähnliches Beispiel kann in diesem Beitrag nicht gefunden werden

Verwandte Themen