2017-04-26 3 views
-1

saveFileNameBtnボタンを押したときにenterFileNameテキストフィールドから文字列fileNameを返したいとします。私はinline action listener methodのテキストを取得しようとしましたが、私はそれを返すときに変数が範囲外です。ボタンを押したときにテキストフィールドから文字列を返す方法は?

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; 
} 

fileNameが範囲外であり返されないため、これは機能しません。

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; 
} 

答えて

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

あなたはActionListenerのクラスのfileName変数外を定義し、構文OuterclassName.thisを使用して、それを参照することができます。あなたのクラスの名前がわからないので、Outerclassをその名前に置き換えてください。

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

は、Java 8を使用している場合、あなたも匿名のActionListenerクラスのラムダ式を使用し、さらにコードを簡素化することができます。

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

    return fileName; 
} 

同様の例がこの記事に見出すことができる:(final問題を無視して)Accessing Variable within JButton ActionListener

関連する問題