Java 如何将.txt文件添加到JTextArea,以及将.txt文件放在何处?

Java 如何将.txt文件添加到JTextArea,以及将.txt文件放在何处?,java,swing,jtextarea,Java,Swing,Jtextarea,我正在开发我的第一个GUI程序,几乎完成了最后一个类是一个jFrame,它有一个.txt文件和一个关闭窗口的按钮,我不知道如何将我的文件附加到窗口??? 包,例如edu.guc.santorini.gui import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionList

我正在开发我的第一个GUI程序,几乎完成了最后一个类是一个jFrame,它有一个.txt文件和一个关闭窗口的按钮,我不知道如何将我的文件附加到窗口??? 包,例如edu.guc.santorini.gui

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Rules extends JFrame implements ActionListener, MouseListener{
JPanel Rules;
JTextArea  rules;
public Rules() throws IOException
{
    super();
    setTitle("Rules Of Santorini Board Game");
    setSize(1000, 700);
    setLocation(200, 100);
    Container content = getContentPane();
    content.setBackground(new Color(220,20,60));
    content.setLayout(new BorderLayout());
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    WindowDestroyer wd = new WindowDestroyer();
    addWindowListener(wd);

    JTextArea  rules=new JTextArea();
    rules.append("");


    JTextArea textArea = new JTextArea();
    JScrollPane scrollPane = new JScrollPane(textArea);

    StringBuilder builder = new StringBuilder();

    // read a text file from resources folder that is parallel to src folder
    BufferedReader reader = new BufferedReader(new FileReader(new               File("resources/New Text Document.txt")));
    String line = null;
    while ((line = reader.readLine()) != null) {
        // read the file line by line
        builder.append(line).append(System.lineSeparator());
    }
    reader.close();

    // set the content of file in text area
    textArea.setText(builder.toString());

       /* FileReader fileReader = new FileReader("New Text Document.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);

String inputFile = "";
String textFieldReadable = bufferedReader.readLine();

while (textFieldReadable != null){
    inputFile += textFieldReadable;
    textFieldReadable = bufferedReader.readLine();                    
    rules.setText(inputFile);*/



    Rules=new JPanel();
    Rules.setLayout(null);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    Rules.setVisible(true);
    Rules.setBackground(Color.ORANGE);
    add(Rules, BorderLayout.CENTER);
    Rules.setSize(1000, 700);
    this.getContentPane().add(Rules);


    JButton ok=new JButton("Got It");
    ok.setSize(100, 50);
    ok.setLocation(800, 570);
    ok.addMouseListener(this);
    Rules.add(ok);

    ok.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
            //dispose();
            setVisible(false);

        }
  });

    //JFrame f = new JFrame();
    //f.setSize(320, 200);
    //f.getContentPane().add(rules);
    //f.setVisible(true);



}




@Override
public void mouseClicked(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

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

}

}
在哪里放置我的.txt文件

你可以试试任何一种

// Read from same package 
InputStream in = getClass().getResourceAsStream("abc.txt");

// Read from resources folder parallel to src in your project
File file = new File("resources/abc.txt");

// Read from src/resources folder
InputStream in = getClass().getResourceAsStream("/resources/abc.txt");
-编辑-

必须阅读

以下是代码中的一些要点:

不要使用空布局规则。setLayoutnull; 调用JFramesetVisibletrue;最后,当所有组件都被添加时 始终使用SwingUtilities.invokeLater初始化GUI 遵循Java命名约定。 要将文件读入JTextArea,您只需使用它,这将丢弃JTextArea的当前内容

更新

在将代码添加到IDE之后,我注意到您没有将规则添加到JTextArea中,因此它将永远不可见

你如何创建你的UI的一般结构也有点偏斜,试试像

public class Rules extends JFrame {

    public Rules() throws IOException {
        super();
        // Initial setu[
        setTitle("Rules Of Santorini Board Game");

        // Create the basic UI content
        JTextArea textArea = new JTextArea(40, 20);
        JScrollPane scrollPane = new JScrollPane(textArea);

        // Read the file
        try (BufferedReader reader = new BufferedReader(new FileReader(new File("resources/New Text Document.txt")))) {
            textArea.read(reader, "File");
        } catch (IOException exp) {
            exp.printStackTrace();
        }

        getContentPane().setBackground(Color.ORANGE);

        JButton ok = new JButton("Got It");
        add(textArea, BorderLayout.SOUTH);
        add(ok, BorderLayout.SOUTH);

        ok.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //dispose();
                //?? No idea what this is for, but it won't do much
                setVisible(false);

            }
        });

        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);

    }

}
不要将鼠标侦听器与按钮一起使用,而应该使用ActionListener

不要使用空布局。像素完美布局在现代UI设计中是一种错觉,您无法控制字体、DPI、渲染管道或其他因素,这些因素将改变组件在屏幕上的渲染方式


Swing设计用于与布局管理器协作以克服这些问题。如果你坚持忽略这些特性,而违背API设计,那么就要为许多令人头痛的事情做好准备,并且要做永无止境的艰苦工作……

你想在JTextArea中显示文本文件的内容吗?或者您无法读取文件?我想在窗口中显示内容实际上我想在我的窗口中显示内容,但搜索时找不到如何显示内容,请不要使用空布局。像素完美布局在现代UI设计中是一种错觉,您无法控制字体、DPI、渲染管道或其他因素,这些因素将改变组件在屏幕上的渲染方式。Swing设计用于与布局管理器协作以克服这些问题。如果你坚持忽略这些特性,而违背API设计,要准备好面对很多麻烦和永无止境的艰苦工作…问题是在抛出异常之后,另一个类在初始化类Rules=null之后需要try-catch块,并且我不知道如何处理AppearTextArea的问题没有添加到JFrame中。第二,您已经为规则创建了一个局部变量和实例变量。整个过程表明,您已经陷入了困境。程序员在尝试应用程序之前应该熟悉诸如异常处理之类的基本知识。使用GUI+感谢他们在这里所做的努力。@user2419300我已经为您添加了代码,但您必须学习很多。不要着急,继续学习。你正在对项目结构、文件位置和工作环境进行假设……我没有看到OP提到的任何嵌入式资源、丢失的文件或开发环境,请注意;这是一个完美的解决方案。@Braj不知道它是否完美,但它很简单;