2013-05-01 2 views
0

스크롤 패널 내에서 JTextArea를 사용하는 데 문제가 있습니다. 나는 텍스트 파일에서 읽을 수 있지만 내용은 모두 한 줄에 표시됩니다. 나는 여러 가지 방법을 시도하고 추가를 사용하여 라인을 깰려고했지만 성공과 함께.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

:

//homeText.setText(read()); 

대신, 단지 JTextArea에 API에서 제공하는 읽기() 메서드를 사용합니다. – Smit

+0

나는 스크롤 창 크기가 실제로 0x0 (또는 충분히 가까워서)가 아니므로 걱정하지 않을 것이다. 텍스트 영역에 더 큰 크기를 갖도록 열과 행 값을 부여하십시오. – MadProgrammer

+0

'BufferedReader.readLine()'은 개행을 먹음으로써 데이터를 손상시킵니다. 다시 추가해야하지만 올바른 줄 바꿈을 추가하는지 또는 마지막 줄에 끝에 개행 문자가 있는지 모를 수 있습니다. 또는 더 나은 아직, 그 방법을 사용하지 마십시오. 데이터를 한 줄씩 읽어야 할 이유가 없습니다. 다른'read()'메소드 중 하나를 사용하십시오. –

답변

0

homeText.setLineWrap(true);이 트릭을 수행해야합니다.

homeText 변수를 생성 한 직후에이 줄을 입력하면 텍스트가 JTextArea 크기로 줄 바꿈됩니다.

또한 오버 헤드가 많은 문자열 연결을 사용하는 대신 을 while 루프에 넣으십시오. 대신 단지 text를 추가의

1

,

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

text + "\n"은 또한 (함께 스트림의 나머지 부분을 등) BufferedReader을 닫으려면 finally 블록을 추가 추가하려고

+0

결코'FileReader'를 절대로 사용하지 마십시오. 사용하려는 인코딩을 지정할 수 없으므로 실행되는 플랫폼의 기본 인코딩이 파일의 인코딩과 일치하지 않으면 데이터가 손상됩니다. –

+0

첫 번째 답변에서 OP 코드를 사용했습니다. 지금 업데이트되었습니다! –

+0

FileReader 대신 무엇을 제안합니까? InputStreamReader? 이 방법은 파일 인코딩을 알고있는 경우 도움이됩니다. 아니라면 FileReader를 사용할 수도 있습니다. –

5

자신 만의 방법을 쓰지 마십시오 JTextArea에 데이터를로드합니다. 이스케이프 시퀀스 '\ n` 줄 바꿈으로 당신이 라인을 추가 할 필요가 각 행을 읽은 후

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

최선의 접근 방법은 멀리 .. –

+0

절대'FileReader'를 절대로 사용하지 마십시오. 사용하려는 인코딩을 지정할 수 없으므로 실행되는 플랫폼의 기본 인코딩이 파일의 인코딩과 일치하지 않으면 데이터가 손상됩니다. –

+0

@Christoffer Hammarström 어쩌면 거기에있을 수 있습니다 다른 문제 (승리에 사용자, 전체 지역화, cp1250/ISO 8859-2 및 similair 비 ASCII 문자 집합) – mKorbel

관련 문제