无法在Java中更改JTextArea中的文本

时间:2014-03-08 08:57:23

标签: java swing file-io jtextarea jfilechooser

我创建了一个扩展另一个类的类,这样我就可以从主类中获取JTextArea。我出于某种原因没有收到任何错误。当我得到JTextArea的文本时,它是我将其更改为的文本,但它没有显示在JTextArea上。我正在尝试打开一个txt文件并从文件中获取文本并将其放在JTextArea上。任何人都可以提出任何建议,为什么这可能不起作用?

 public JMenuItem open(){
        open.addActionListener (new ActionListener (){
            public void actionPerformed (ActionEvent e){
                jta.setText("");
                fileChooser=new JFileChooser();
                fileChooser.setDialogTitle("Choose a file...");
                int response=fileChooser.showOpenDialog(null);

                if(response==JFileChooser.APPROVE_OPTION){
                    String filePath=fileChooser.getSelectedFile().toString();
                    try{
                        File userFile=new File(filePath);
                        Scanner scan=new Scanner(userFile);
                        String text="";
                        while(scan.hasNextLine()){
                            text+=scan.nextLine();
                            jta.replaceSelection(text);
                        }
                    }catch (IOException e1){
                        e1.printStackTrace();
                    }
                }

            }
        });
        open.setAccelerator(KeyStroke.getKeyStroke('O', KeyEvent.CTRL_DOWN_MASK));
        return open;
    }

这个^^^的用法如下:

public class FileMenu extends MenuBar{
    private JMenu file=new JMenu("File");
    JMenuItem New= new JMenuItem("New");
    JMenuItem open= new JMenuItem("Open file...");
    JMenuItem save= new JMenuItem("Save");
    JMenuItem saveAs= new JMenuItem("Save As...");
    JMenuItem close= new JMenuItem("Exit");
    public JFileChooser fileChooser;
    FileActions fileActions;

    public FileMenu(){

    }

    public JMenu menu(){
        fileActions=new FileActions();
        file.add(fileActions.newWindow());
        file.add(fileActions.open());
        file.addSeparator();
        file.add(save);
        file.add(saveAs);
        file.addSeparator();
        file.add(close);

        save.setAccelerator(KeyStroke.getKeyStroke('S', KeyEvent.CTRL_DOWN_MASK));
        saveAs.setAccelerator(KeyStroke.getKeyStroke('E', KeyEvent.CTRL_DOWN_MASK));
        close.setAccelerator(KeyStroke.getKeyStroke('Q', KeyEvent.CTRL_DOWN_MASK));

        mb.add(file);
        return file;
    }
}

这是创建JTextArea的地方:

public class Frame {
    static final String title="Simple Text Editor";
    static final int width=650;
    static final int height=700;
    public JFrame frame=new JFrame(title);
    public JTextArea jta=new JTextArea();
    JScrollPane scrollPane=new JScrollPane(jta);

    public void create(){
        //JFrame
        frame.setSize(width,height);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setLocationRelativeTo(null);

        // JMenuBar
        MenuBar menuBar=new MenuBar();
        frame.add(menuBar.menuBar(), BorderLayout.NORTH);

        jta.setText("Well this works...");
        // JTextArea
        jta.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
        frame.add(scrollPane, BorderLayout.CENTER);
    }
}

1 个答案:

答案 0 :(得分:3)

似乎您希望使用文本文件的内容填充文本区域。但要做到这一点,你要阅读文本文件的每一行并执行

jta.replaceSelection(text);

但正如其名称和javadoc所示,replaceSelection()替换了用户在文本区域中选择的文本。您只需要清除文本区域并将文本附加到文本区域:

jta.setText(""); // clear
while (scan.hasNextLine()){
    String line = scan.nextLine();
    jta.append(line);
    jta.append("\n");
}

或者,更容易:

jta.read(new FileReader(userFile, null);

将从您的文件中读取所有内容并使用其内容填充文本区域。