2013-05-01 33 views
0

我在滾動窗格中使用JTextArea時遇到問題。我可以從文本文件中讀取,但內容全部顯示在一行上。我嘗試過使用append嘗試各種方法,試圖打破這條線,但沒有成功。JTextArea不會顯示新行上的文件內容

import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 

import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 

public class SplashScreen extends JFrame implements ActionListener 
{ 

    JButton mobile; 
    JButton browser; 
    JLabel welc; 
    JPanel home; 
    File file = new File("C:\\Users\\Jimbob\\Desktop\\DisWorkspace\\TrustWizard\\welcometwo.txt"); 
    BufferedReader reader = null; 
    int lines = 10; 

    public String read() 
    { 
     String savetext = ""; 

     try 
     { 
      reader = new BufferedReader(new FileReader(file)); 
      String text = null; 

      while((text = reader.readLine()) != null) 
      { 
       savetext += text; 
      } 
     } 
     catch(IOException jim) 
     { 
      jim.printStackTrace(); 
     } 
     return savetext; 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     if(e.getSource().equals(mobile)) 
     { 
      MobileHome openB = new MobileHome(); 
      this.dispose(); 
     } 
     if(e.getSource().equals(browser)) 
     { 
      BrowserHome openB = new BrowserHome(); 
      this.dispose(); 
     } 
    } 

    public SplashScreen() 
    { 
     super("Trust Wizard"); 

     JTextArea homeText = new JTextArea(25, 30); 
     homeText.setText(read()); 

     JScrollPane homeScroll = new JScrollPane(homeText); 

     welc = new JLabel("Welcome To The Trust Wizard"); 
     home = new JPanel(); 
     mobile = new JButton("Mobile Wizard"); 
     browser = new JButton("Browser Wizard"); 

     home.add(welc); 
     home.add(homeScroll); 
     home.add(mobile); 
     home.add(browser); 

     ImageIcon img = new ImageIcon("hand.jpg"); 
     setIconImage(img.getImage()); 

     mobile.addActionListener(this); 
     browser.addActionListener(this); 

     getContentPane().add(home); 
     home.repaint(); 
     setSize(450, 530); 
     setVisible(true); 

    } 

    public static void main(String args[]) 
    { 
     SplashScreen test = new SplashScreen(); 

    } 
} 
+0

讀你必須追加該行每行由'\ N'換行符轉義序列之後。 – Smit 2013-05-01 20:14:22

+0

我擔心滾動窗格的首選大小實際上是0x0(或足夠接近),所以它沒有顯示出來。嘗試給文本區域一個列和行值,以鼓勵它具有更大的尺寸 – MadProgrammer 2013-05-01 20:14:37

+0

'BufferedReader.readLine()'通過吃掉換行符來破壞你的數據。你必須自己添加它們,但是你永遠不知道你是否加回了正確的換行符,或者如果最後一行在最後有一個換行符。或者更好的是,不要使用這種方法。沒有理由必須逐行讀取數據。只需使用其他'read()'方法之一。 – 2013-05-01 20:46:30

回答

0

homeText.setLineWrap(true);應該爲你做詭計。

將該行放在創建homeText變量的位置之後,然後您的文本將包裝爲您的JTextArea的大小。

還在您的while循環中放入StringBuilder而不是使用字符串連接,該連接有很多開銷。

1

相反只是附加的text,嘗試追加text + "\n"

public String read() { 
    BufferedReader reader = null; 
    StringBuilder builder = new StringBuilder(); 
    try { 
     reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8")); 
     String text = null; 
     while((text = reader.readLine()) != null) { 
      builder.append(text + "\n"); 
     } 
    } catch(IOException jim) { 
     jim.printStackTrace(); 
    } finally { 
     try { 
      if (reader != null) reader.close(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 
    return builder.toString(); 
} 

同時加入了一個finally塊關閉BufferedReader(與它流的其餘部分)

+0

永遠不要使用'FileReader'。它使指定要使用的編碼成爲不可能,因此如果運行的平臺的默認編碼與文件的編碼不匹配,則會破壞數據。 – 2013-05-01 20:50:17

+0

在第一個答案中使用了OP的代碼,現在已更新! – 2013-05-01 21:12:37

+0

你建議用什麼來代替FileReader? InputStreamReader的?如果你知道文件編碼,這會有所幫助,但如果不知道,你可以使用FileReader。 – 2013-05-01 21:36:47

5

不要寫你自己的方法將數據加載到JTextArea中。

//homeText.setText(read()); 

相反,只使用由JTextArea的API提供的read()方法:

FileReader reader = new FileReader(your file name here); 
BufferedReader br = new BufferedReader(reader); 
homeText.read(br, null); 
br.close(); 
+0

迄今爲止最好的方法.. – 2013-05-02 04:13:47

+0

永遠不要使用FileReader。它使指定要使用的編碼成爲不可能,因此如果運行的平臺的默認編碼與文件的編碼不匹配,則會破壞數據。 – 2013-05-02 06:53:36

+0

@ChristofferHammarström也許可能是由另一個問題引起的(Win上的用戶,完全本地化,cp1250/ISO 8859-2和相似的非ASCII字符集) – mKorbel 2013-05-02 09:01:55