【问题标题】:Java newbie: Swing and displaying ASCII filesJava 新手:摆动和显示 ASCII 文件
【发布时间】:2010-10-09 18:50:13
【问题描述】:

万事如意,

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

以下是我的代码,它逐字节读取 ASCII 文件。我感谢乐于助人的评论者解释说 JTextArea.setEditable(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);
    }
}

【问题讨论】:

    标签: java swing file ascii


    【解决方案1】:

    使用 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 tutorial 以获取有关使用 Swing 组件的更多信息

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 非常感谢。我很欣赏 MrWiggles 是第一名,但您紧随其后!
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        这让我觉得自己像船长明显,但仍然:只需先加载整个文本,然后然后使用所需的文本构建标签。或者,正如其他发帖人正确建议的那样,使用 JTextArea,因为它更适合多行内容。

        【讨论】:

          【解决方案5】:

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

          jtextarea.setEditable(false);
          

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

            • 谢谢迈克尔,知道这很有用。
            【解决方案7】:

            这里:

            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;
            }
            

            您可以在这些问题中看到更好的模式。

            How do I create a Java string from the contents of a file?

            https://stackoverflow.com/questions/181634/simplest-efficient-ways-to-read-binary-and-ascii-files-to-string-or-similar-in-v/324792#324792(见java部分)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-16
              • 1970-01-01
              • 2013-02-21
              • 1970-01-01
              相关资源
              最近更新 更多