首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Swing 核心組件 JTextArea 多行文字區完整教學

     編輯:Java 相關知識

前言

JTextArea 是 Swing 提供的多行純文字編輯區,支援自動換行、捲動、唯讀模式,是記事本、日誌視窗、SQL 編輯器等桌面應用的基石。本文詳細說明建構子、核心方法、捲動面板整合與完整範例。

常用建構子

建構子說明
JTextArea()空白、無行列限制
JTextArea(int rows, int cols)指定可見行數與字元寬度(影響 preferred size)
JTextArea(String text)預載文字
JTextArea(String text, int rows, int cols)文字+行列
JTextArea(Document doc)使用自訂 Document 模型
JTextArea(Document doc, String text, int rows, int cols)完整客製化

核心方法速查

  • append(String str):在文末追加文字(常用於日誌即時顯示)
  • insert(String str, int pos):在指定位移插入
  • setLineWrap(boolean wrap):啟用/關閉自動換行
  • setWrapStyleWord(boolean word):true 整詞換行,false 強制斷字
  • setEditable(boolean b):設為唯讀(false)或可編輯
  • setFont(Font f):設定字型
  • setRows(int) / setColumns(int):調整可見行列(需重新 revalidate())
  • getLineCount()、getLineStartOffset(int)、getLineEndOffset(int):行資訊

關鍵:必須搭配 JScrollPane

JTextArea 本身不具捲動功能,必須放入 JScrollPane:

JTextArea area = new JTextArea(20, 60);
area.setLineWrap(true);
area.setWrapStyleWord(true);
JScrollPane scroll = new JScrollPane(area,
    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
    JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

JScrollPane 常用捲動策略常數

  • VERTICAL_SCROLLBAR_AS_NEEDED:需要時顯示垂直捲軸(預設)
  • VERTICAL_SCROLLBAR_ALWAYS:永遠顯示
  • VERTICAL_SCROLLBAR_NEVER:永不顯示
  • 水平捲軸同理 HORIZONTAL_SCROLLBAR_*

完整範例:可切換換行模式的迷你記事本

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MiniNotepad extends JFrame {
    private JTextArea textArea;
    private JCheckBox wrapCheck;

    public MiniNotepad() {
        setTitle("Mini Notepad");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        // 工具列
        JToolBar bar = new JToolBar();
        wrapCheck = new JCheckBox("自動換行", true);
        wrapCheck.addActionListener(e -> textArea.setLineWrap(wrapCheck.isSelected()));
        bar.add(wrapCheck);
        JButton clearBtn = new JButton("清空");
        clearBtn.addActionListener(e -> textArea.setText(""));
        bar.add(clearBtn);
        add(bar, BorderLayout.NORTH);

        // 文字區 + 捲動
        textArea = new JTextArea(25, 80);
        textArea.setFont(new Font("Monospaced", Font.PLAIN, 14));
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        add(new JScrollPane(textArea), BorderLayout.CENTER);

        pack();
        setLocationRelativeTo(null);
    }

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

常見問題與技巧

  1. 大量文字追加效能:append 內部已優化,但極大量(>10萬行)建議定期 setText("") 或使用 Document 直接操作。
  2. 禁止水平捲動:設定 setLineWrap(true) + JScrollPane.HORIZONTAL_SCROLLBAR_NEVER。
  3. 唯讀模式保留複製功能:setEditable(false) 仍可選取複製,若需完全鎖定需加 setFocusable(false)。
  4. 行號顯示:Swing 無內建行號,需自訂 JTextComponent 搭配 Gutter 元件或使用第三方庫(如 RSyntaxTextArea)。

結語

掌握 JTextArea + JScrollPane 的黃金搭配、換行模式與唯讀控制,即可快速構建專業級多行文字編輯功能。進階需求(語法高亮、行號、代碼摺疊)建議改用 RSyntaxTextArea 等成熟元件庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved