Java新手:Swing和显示ASCII文件

Java新手:Swing和显示ASCII文件,java,swing,file,ascii,Java,Swing,File,Ascii,一整天 我有一个应用程序,它需要在Swing组件中显示一个15行的ASCII文件,用户无法编辑该文件 下面是我逐字节读取ASCII文件的代码。感谢那些帮助我的评论,他们解释说JTextArea.setediate(false)在Swing中是合适的 然而,我的代码只显示一个数字字符串,而我个人将ASCII文件做了一些完全不同的事情。有人知道我做错了什么,以及如何让ASCII字符自己显示吗 import java.io.*; import javax.swing.*; public class

一整天

我有一个应用程序,它需要在Swing组件中显示一个15行的ASCII文件,用户无法编辑该文件

下面是我逐字节读取ASCII文件的代码。感谢那些帮助我的评论,他们解释说JTextArea.setediate(false)在Swing中是合适的

然而,我的代码只显示一个数字字符串,而我个人将ASCII文件做了一些完全不同的事情。有人知道我做错了什么,以及如何让ASCII字符自己显示吗

import java.io.*;
import javax.swing.*;

public class LoadMap extends JFrame {
    public LoadMap() throws IOException {
        FileInputStream fIn = new FileInputStream("map.srn");
        BufferedReader rd = new BufferedReader(new InputStreamReader(fIn, "US-ASCII"));
        String map = "";
        JTextArea mapArea = new JTextArea(15, 50);

        try {
            int c;
            while ((c = rd.read()) != -1) {
                map= map + c;
            }
        } finally {
            if (rd != null) {
                rd.close();
            }
        }
        mapArea.setText(map);
        mapArea.setEditable(false);
        add(mapArea);
        pack();
        setVisible(true);
    }
}

使用JTextArea并调用

setEditable(false);
停止用户编辑数据的步骤

我刚刚通读了你的代码,意识到这还不够全面。你不能在标签上打“+”。你需要做的是先读入文本并将其存储在某个地方,然后调用

setText(yourTextAsString);
在屏幕上的文本组件上(我仍然使用JTextArea),您需要将文本区域添加到框架中,这样您的代码看起来像:

public LoadMap() {
     String data = // read your data
     JTextArea textArea = new JTextArea();
     textArea.setText(data);
     textArea.setEditable(false);
     setLayout(new GridLayout());
     add(textArea);
     pack();
     setVisible(true);
}

我建议阅读以获得有关使用Swing组件的更多信息,使用JTextArea并调用setEditable(false)


您可以在循环中构造一个字符串,然后在完成后将该字符串放入JLabel中。

这让我感觉很明显,但仍然是:只需首先加载整个文本,然后使用所需文本构建标签。或者,正如其他海报正确建议的那样,使用JTextArea,因为它更适合多行内容。

您可以使用JTextArea并将其设置为只读:

jtextarea.setEditable(false);

JLabel不会显示换行符(除非使用HTML)。正如其他人所写,使用文本区域

但是,代码中还有另一个隐藏的问题:您没有指定文件的编码,这意味着如果文件包含非ASCII字符,并且其编码与Java的平台默认值不匹配,则文件内容可能会被篡改。要解决此问题,请不要使用
FileReader
。相反,使用
FileInputStream
并将其包装在
InputStreamReader
中,在其构造函数中指定编码。

此处:

String map = "";
int c;
while ((c = rd.read()) != -1) {
    map= map + c;
}
你要做的是在字符串后面加上int

您应该将它们转换为char

int c;
while ((c = rd.read()) != -1) {
    map= map + ( char ) c;
}
你可以在这些问题中看到更好的模式


(参见java部分)

非常感谢。我很感激Wiggles先生是第一位,但你紧随其后!谢谢,迈克尔,知道这一点很有用。