2009-02-25 18 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中,在其構造函數中指定編碼。