2009-02-25 25 views
2

天儿真好所有,爪哇新手:摆动和显示ASCII文件

我具有需要显示的在摆动部件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); 
    } 
} 

回答

0

这里:

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部分)

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组件

+0

您可以通过10秒几乎同样的措辞打我! – JeeBee 2009-02-25 10:27:00

+0

非常感谢。 – elwynn 2009-02-25 10:29:32

1

您可以构建循环内一个字符串,然后把字符串转换成一个JLabel当你完成。

1

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

0

你可以使用一个JTextArea,并将其设置为只读:

jtextarea.setEditable(false); 
1

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

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