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

Java Swing 將 JTextArea 加入 JPanel 的標準做法與版面配置技巧

     編輯:程式設計疑難解答

核心步驟

  1. 建立 JTextArea 元件。
  2. 包裹在 JScrollPane 中(提供捲軸)。
  3. 將 JScrollPane 加入 JPanel。
  4. 設定 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

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