核心步驟
- 建立
JTextArea 元件。
- 包裹在
JScrollPane 中(提供捲軸)。
- 將
JScrollPane 加入 JPanel。
- 設定
JPanel 的版面管理器。
完整可執行範例
import javax.swing.*;
import java.awt.*;
public class TextAreaDemo {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("JTextArea 範例");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
// 1. 建立文字區域
JTextArea textArea = new JTextArea(10, 30);
textArea.setLineWrap(true); // 自動換行
textArea.setWrapStyleWord(true); // 整字換行
textArea.setFont(new Font("微軟正黑體", Font.PLAIN, 14));
// 2. 加入捲軸面板(關鍵!否則超出範圍不顯示捲軸)
JScrollPane scrollPane = new JScrollPane(textArea,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
// 3. 建立面板並設定版面
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
panel.add(scrollPane, BorderLayout.CENTER);
// 4. 可選:底部加入字數統計標籤
JLabel status = new JLabel("字數: 0");
panel.add(status, BorderLayout.SOUTH);
textArea.getDocument().addDocumentListener(new javax.swing.event.DocumentListener() {
public void insertUpdate(javax.swing.event.DocumentEvent e) { update(); }
public void removeUpdate(javax.swing.event.DocumentEvent e) { update(); }
public void changedUpdate(javax.swing.event.DocumentEvent e) { update(); }
private void update() {
status.setText("字數: " + textArea.getText().length());
}
});
frame.add(panel);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
常見版面管理器選擇指南
| 管理器 | 適用場景 |
BorderLayout | 單一主元件佔滿、邊緣放工具列/狀態列(最常用) |
BoxLayout | 垂直/水平堆疊多個元件,如表單欄位 |
GridBagLayout | 複雜網格對齊,彈性最高但程式碼較繁 |
MigLayout | 第三方庫,語法簡潔強大,推薦大型專案 |
避坑指南
- 忘記 JScrollPane:直接
panel.add(textArea) 會導致無捲軸、文字超出不顯示。
- 未設定 preferredSize:若面板在
FlowLayout 中,文字區可能縮成一行;改用 BorderLayout 或明確 setPreferredSize。
- EDT 執行緒:所有 Swing 操作必須在 Event Dispatch Thread 執行,使用
SwingUtilities.invokeLater。
參考資源
官方教學:How to Use Text Areas