java - 如何将txt文件的内容读取到文本区域?

标签 java swing jtextarea

我想将文本文件的内容读取到文本区域 应用。文本区域显示为空,我无法在其中输入任何内容。我是 Swing 新手。

这是我使用的代码:

class Menu implements ActionListener
{
    JLabel jlab;

    Menu()
    {
        JFrame jfrm = new JFrame("Menudemo");
        jfrm.setLayout(new FlowLayout());
        jfrm.setSize(720, 700);

        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
         JTextArea edit = new JTextArea("HI I AM A TEXTAREA",520,500);
        edit.setEditable(true);
        JScrollPane sta = new JScrollPane(edit);

        sta.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        sta.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

        jlab = new JLabel();

        JMenuBar jmb = new JMenuBar();

        JMenu jmfile = new JMenu("File");
        JMenuItem jmiopen = new JMenuItem("Open");
        JMenuItem jmiclose = new JMenuItem("Close");
        JMenuItem jmisave = new JMenuItem("Save");
        JMenuItem jmiexit = new JMenuItem("Exit");
        jmfile.add(jmiopen);
        jmfile.add(jmiclose);
        jmfile.add(jmisave);
        jmfile.add(jmiexit);
        jmb.add(jmfile);

   //i want to open a file through the dialog box and load the content into the 
   //text area
        jmiopen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae)
            {
                 try{
                      File selectedFile = jfc.getSelectedFile();

                        int returnvalue = jfc.showOpenDialog(null);

                        if(returnvalue == JFileChooser.APPROVE_OPTION)
                        {
                        FileReader reader = new 
                        FileReader(selectedFile.getAbsolutePath());

                        @SuppressWarnings("resource")
                        BufferedReader br = new BufferedReader(reader);
                        String line = br.readLine();
                        while(line != null)
                        {
                            edit.append(line);
                           line=br.readLine();
                        }
                        /*ja.read(br,null);
                        br.close();
                        ja.requestFocus();
                        */
                       }
                 }
                 catch(Exception e2)
                    {
                        System.out.println(e2);
                    }
             }
        });
        jmiclose.addActionListener(this);
        jmisave.addActionListener(this);
        jmiexit.addActionListener(new ActionListener(){
            @Override
             public void actionPerformed(ActionEvent ae){
                System.exit(0);
            }
        });
        jfrm.add(edit);
        jfrm.add(sta);

        jfrm.add(jlab);
        jfrm.setJMenuBar(jmb);
        jfrm.setVisible(true);
  }

    public static void main(String args [])
    {
         SwingUtilities.invokeLater(new Runnable(){
             public void run()
             {
                 new Menu();
             }
         });
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub
    }
    }

最佳答案

下面的代码可以工作。您的第一个问题是您在用户选择任何内容之前就获得了 selectedFile (将其向下移动到用户选择文件的位置)。您的下一个问题是布局。作为初学者,您应该从 BorderLayout 开始,因为在您掌握概念之前它很容易处理。第三个问题是您添加了 TextArea 2 次。第一次使用 jfrm.add(edit);,第二次使用 jfrm.add(sta);。您只需添加 ScrollPane,因为它包含 TextArea

package test;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileSystemView;

class Menu implements ActionListener {
    public Menu() {
        JFrame jfrm = new JFrame("Menudemo");
        jfrm.setLayout(new BorderLayout());
        jfrm.setSize(720, 700);

        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
        JTextArea edit = new JTextArea("HI I AM A TEXTAREA");
        edit.setEditable(true);
        JScrollPane sta = new JScrollPane(edit);

        sta.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        sta.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

        JMenuBar jmb = new JMenuBar();

        JMenu jmfile = new JMenu("File");
        JMenuItem jmiopen = new JMenuItem("Open");
        JMenuItem jmiclose = new JMenuItem("Close");
        JMenuItem jmisave = new JMenuItem("Save");
        JMenuItem jmiexit = new JMenuItem("Exit");
        jmfile.add(jmiopen);
        jmfile.add(jmiclose);
        jmfile.add(jmisave);
        jmfile.add(jmiexit);
        jmb.add(jmfile);

        // i want to open a file through the dialog box and load the content into the
        // text area
        jmiopen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                try {

                    int returnvalue = jfc.showOpenDialog(null);

                    if (returnvalue == JFileChooser.APPROVE_OPTION) {
                        File selectedFile = jfc.getSelectedFile();
                        try (BufferedReader reader = new BufferedReader(new FileReader(selectedFile))) {
                            String line = reader.readLine();

                            while (line != null) {
                                edit.append(line);
                                line = reader.readLine();
                            }
                            //Suggestion opposed by Andrew Thompson; 
                            //would be used instead of while loop. 
                            //It will override any existing text 
                            //with the whole content of the file
                            edit.read(reader, selectedFile);

                        }
                    }
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
        });
        jmiclose.addActionListener(this);
        jmisave.addActionListener(this);
        jmiexit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                System.exit(0);
            }
        });

        jfrm.add(sta);
        jfrm.setJMenuBar(jmb);
        jfrm.setVisible(true);
        // jfrm.pack();

    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Menu();

            }
        });
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub

    }
}

关于java - 如何将txt文件的内容读取到文本区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46522484/

相关文章:

Java 日志 ==> JTextArea

java - 我可以使用compareTo 对整数和 double 值进行排序吗?

java - JComboBox 返回值

java - Android:向 ListView 中显示的项目的数组列表添加日期格式和排序

java - 从另一个类更改 Java 卡布局中的 Activity "card"

java - 切换面板 - 卡片布局

java - 监听 JTextArea 按下的按键

java - JTextArea 在父缩小时不换行

java - Apache Spark maven tomcat :run

java - FirebaseUI,指定在特定情况下打开特定 Activity (注册后)