Открытие Java-файла в JTextArea - PullRequest
0 голосов
/ 21 марта 2019

Я довольно новичок в Java, поэтому мне было интересно, может ли кто-нибудь помочь мне разобраться в этом.

Мне удалось создать программу, которая позволяет пользователю вводить имя файла, которое затем показываетсодержимое файла в системном выводе, но я хочу иметь возможность отображать вывод в JTextArea вместо текущего места вывода.Может ли кто-нибудь помочь мне понять, как это возможно?

Поскольку в одном из комментариев было предложено добавить JFrame, прежде чем делать что-либо еще, и мне удалось создать JFrame с JTextArea, но япо-прежнему не удается отобразить текстовый файл в TextArea.

import java.awt.GraphicsConfiguration;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;


public class OpenFile {

    static GraphicsConfiguration gc;

    public static void main(String[] args) {



    String selectModule = "";
    selectModule = JOptionPane.showInputDialog("Module Input: ");

    Path path = Paths.get(selectModule);     

    String fileOpener = selectModule;

    if(selectModule.equalsIgnoreCase(fileOpener)){
    //Makes the user input case insensitive
    }

    BufferedReader br = null;
    FileReader fr = null;

    try {

        //br = new BufferedReader(new FileReader(FILENAME));
        fr = new FileReader(fileOpener + ".txt");
        br = new BufferedReader(fr);

        String sCurrentLine;

        while ((sCurrentLine = br.readLine()) != null) {
            System.out.println(sCurrentLine);
        }

    } catch (IOException e) {

        e.printStackTrace();

    } finally {

        try {

            if (br != null)
                br.close();

            if (fr != null)
                fr.close();

        } catch (IOException ex) {

            ex.printStackTrace();

        }

    }

        JTextArea TextArea22 = new JTextArea(selectModule);

    JFrame frame= new JFrame(gc);   
    frame.setTitle("Opening TextFile");
    frame.setSize(600, 400);
    frame.setLocation(200, 200);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);  
        frame.add(TextArea22);

    }
}

1 Ответ

0 голосов
/ 22 марта 2019

Код для чтения всего содержимого файла можно упростить с помощью Files.readAllBytes .

Как только это будет сделано, установите текст JTextArea для содержимого захваченного файла. Если во время чтения файла возникает исключительная ситуация, мы можем вместо этого вывести это полезное сообщение в JTextArea.

И последнее, помните, что любой код, управляющий компонентом Swing, должен выполняться в потоке диспетчеризации событий . Итак, поместите этот код в Runnable и передайте его SwingUtilities.invokeLater .

Попробуйте:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class OpenFile {
    public static void main(String[] args) {
        String selectModule = JOptionPane.showInputDialog("Module Input: ");
        String content = "";

        try {
            content = new String(Files.readAllBytes(Paths.get(selectModule)));
        } catch (IOException e) {
            content = e.toString();
        }

        final String fileContent = content;

        Runnable r = new Runnable() {
            public void run() {
                JTextArea textArea22 = new JTextArea(fileContent);
                JFrame frame= new JFrame();   
                frame.setTitle("Opening TextFile");
                frame.setSize(600, 400);
                frame.setLocation(200, 200);
                frame.setVisible(true);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setResizable(false);  
                frame.add(textArea22);
            }
        };

        SwingUtilities.invokeLater(r);
    }
}
...