簡體   English   中英

JTextArea在新行上不顯示文件內容

[英]JTextArea Does Not Display File Contents On New Lines

我在滾動窗格中使用JTextArea時遇到問題。 我可以從一個文本文件中讀取內容,但是所有內容都顯示在一行上。 我已經嘗試過使用append嘗試各種方法並試圖打破界限,但是沒有成功。

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

    }
}

不要編寫自己的方法將數據加載到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();

相反,只是附加的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 (以及其余的流)

homeText.setLineWrap(true); 應該為您解決問題。

homeText一行放在創建homeText變量的位置之后,然后文本將自動homeText JTextArea的大小。

還要在您的while循環中放置一個StringBuilderwhile不要使用具有大量開銷的String串聯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM