Java 如何将.txt文件添加到JTextArea,以及将.txt文件放在何处?
我正在开发我的第一个GUI程序,几乎完成了最后一个类是一个jFrame,它有一个.txt文件和一个关闭窗口的按钮,我不知道如何将我的文件附加到窗口??? 包,例如edu.guc.santorini.guiJava 如何将.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
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不知道它是否完美,但它很简单;