首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Swing 文件讀取內容顯示於 JTextArea 的完整實現:從控制台輸出轉向圖形界面

     編輯:程式設計疑難解答

原始代碼問題

原代碼在控制台打印文件內容,欲顯示於 JFrame 中,但未將讀取邏輯與界面組件綁定。

修正方案:使用 JTextArea + JScrollPane

public class ReadFile extends JFrame {
    private JTextArea textArea;

    public ReadFile() {
        setTitle("文件查看器");
        setSize(400, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

        textArea = new JTextArea();
        textArea.setEditable(false);
        textArea.setFont(new Font("Monospaced", Font.PLAIN, 14));
        add(new JScrollPane(textArea), BorderLayout.CENTER);

        JButton btnLoad = new JButton("加載文件");
        btnLoad.addActionListener(e -> loadFile());
        add(btnLoad, BorderLayout.SOUTH);
    }

    private void loadFile() {
        JFileChooser chooser = new JFileChooser();
        if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
            File file = chooser.getSelectedFile();
            try (BufferedReader br = new BufferedReader(new FileReader(file))) {
                textArea.read(br, null); // 一鍵讀入
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(this, "讀取失敗: " + ex.getMessage());
            }
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new ReadFile().setVisible(true));
    }
}

關鍵改進

  1. JTextArea.read(Reader, Object):直接從 Reader 讀取文本,自動處理換行,比手動循環 readLine() + append() 更簡潔高效。
  2. JScrollPane:大文件自動提供滾動條。
  3. JFileChooser:圖形化選擇文件,避免硬編碼路徑。
  4. SwingUtilities.invokeLater:確保 UI 在事件分發線程創建。

進階:異步讀取大文件

new SwingWorker() {
    @Override
    protected Void doInBackground() {
        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            String line;
            while ((line = br.readLine()) != null) publish(line);
        } catch (IOException e) { ... }
        return null;
    }
    @Override
    protected void process(List chunks) {
        for (String line : chunks) textArea.append(line + "\n");
    }
}.execute();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved