为什么append函数在ActionListener中不起作用?

时间:2015-11-02 22:01:56

标签: java jfilechooser

在JFileChooser中选择文件之后,我希望JTextField附加到它的路径。我写了以下代码:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.*;

public class Program extends JFrame{


    public static void main(String[] args){

        new Program();

    }

    public Program(){

        this.setSize(500,500);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(false);
        this.setTitle("Projekt Java");

        JPanel thePanel = new JPanel();

        thePanel.setLayout(new FlowLayout(FlowLayout.LEFT));

        JButton button1 = new JButton("Wybierz plik:");
        JButton button2 = new JButton("Dodaj");
        JTextField text = new JTextField(23);
        JTextArea textArea1 = new JTextArea(10,30);

        thePanel.add(button1);
        thePanel.add(text);
        thePanel.add(button2);
        thePanel.add(textArea1);
        this.add(thePanel);

        button1.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent ae) {
                JFileChooser fileChooser = new JFileChooser();
                int returnValue = fileChooser.showOpenDialog(null);
                if (returnValue == JFileChooser.APPROVE_OPTION) {
                  File selectedFile = fileChooser.getSelectedFile();
                  System.out.println(selectedFile.getName());
                  String directory = fileChooser.getCurrentDirectory().toString();

                  text.append(directory); // doesn't work
                }
              }
            });

        this.setVisible(true);

    }

    private static void createFileChooser(final JFrame frame) {

        String filename = File.separator+"tmp";
        JFileChooser fileChooser = new JFileChooser(new File(filename));

        // pop up an "Open File" file chooser dialog
        fileChooser.showOpenDialog(frame);

        System.out.println("File to open: " + fileChooser.getSelectedFile());

        // pop up an "Save File" file chooser dialog
        fileChooser.showSaveDialog(frame);

        System.out.println("File to save: " + fileChooser.getSelectedFile());

    }       
}

但是,追加功能在这里不起作用。有人可以解释为什么会这样吗?它可以工作,除非它不在动作监听器中。我的错误是:

不能引用在不同方法中定义的内部类中的非final变量文本 对于JTextField类型

,方法append(String)是未定义的

我改为text.append(目录); text.setText(目录);并将JTextfield修改为最终版并且有效。

1 个答案:

答案 0 :(得分:3)

使用text.setText(directory)代替text.append(directory)append()方法适用于JTextAreaJTextField没有。{/ p>

您必须将JTextField text声明为final JTextField text