JTextArea多行文本区域

wen java案例 1

JTextArea 多行文本区域详解

JTextArea 是 Swing 中用于显示和编辑多行文本的组件,以下是完整的使用指南:

JTextArea多行文本区域

基本创建

// 创建空文本区域
JTextArea textArea = new JTextArea();
// 指定行数和列数
JTextArea textArea = new JTextArea(10, 30); // 10行30列
// 带初始文本
JTextArea textArea = new JTextArea("初始文本内容\n第二行");
// 带文本、行数、列数
JTextArea textArea = new JTextArea("文本", 10, 30);

常用方法

// 文本操作
textArea.setText("新文本");           // 设置文本
String text = textArea.getText();    // 获取文本
textArea.append("追加文本\n");       // 追加文本
textArea.insert("插入文本", 5);      // 在指定位置插入
textArea.replaceRange("替换", 0, 5); // 替换指定范围的文本
// 编辑控制
textArea.setEditable(false);         // 设置只读
textArea.setEnabled(false);          // 禁用组件
// 选择文本
textArea.selectAll();               // 全选
textArea.select(0, 5);               // 选择0-5位置
textArea.setSelectionStart(2);       // 设置选择开始
textArea.setSelectionEnd(8);         // 设置选择结束

外观设置

// 字体设置
textArea.setFont(new Font("微软雅黑", Font.PLAIN, 14));
// 颜色设置
textArea.setForeground(Color.BLACK);           // 文字颜色
textArea.setBackground(Color.WHITE);           // 背景颜色
textArea.setCaretColor(Color.RED);             // 光标颜色
textArea.setSelectionColor(Color.BLUE);        // 选中背景色
textArea.setSelectedTextColor(Color.WHITE);    // 选中文字色
// 边距设置
textArea.setMargin(new Insets(10, 10, 10, 10)); // 上左下右边距
// 行和列
textArea.setRows(15);                          // 设置行数
textArea.setColumns(40);                       // 设置列数

换行设置

// 自动换行(默认false)
textArea.setLineWrap(true);
// 单词换行(基于单词边界)
textArea.setWrapStyleWord(true);

在 JScrollPane 中使用

// 必须使用滚动面板才能看到滚动效果
JScrollPane scrollPane = new JScrollPane(textArea);
// 设置滚动策略
scrollPane.setVerticalScrollBarPolicy(
    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setHorizontalScrollBarPolicy(
    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

完整示例

import javax.swing.*;
import java.awt.*;
public class JTextAreaExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("JTextArea 示例");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300);
        // 创建文本区域
        JTextArea textArea = new JTextArea(10, 30);
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        textArea.setFont(new Font("微软雅黑", Font.PLAIN, 14));
        textArea.setMargin(new Insets(10, 10, 10, 10));
        // 添加滚动面板
        JScrollPane scrollPane = new JScrollPane(textArea);
        // 添加按钮
        JButton appendBtn = new JButton("追加文本");
        appendBtn.addActionListener(e -> 
            textArea.append("新追加的行\n"));
        JButton clearBtn = new JButton("清空");
        clearBtn.addActionListener(e -> textArea.setText(""));
        // 布局
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(appendBtn);
        buttonPanel.add(clearBtn);
        frame.add(scrollPane, BorderLayout.CENTER);
        frame.add(buttonPanel, BorderLayout.SOUTH);
        frame.setVisible(true);
    }
}

事件监听

// 文本变化监听
textArea.getDocument().addDocumentListener(new DocumentListener() {
    @Override
    public void insertUpdate(DocumentEvent e) {
        System.out.println("文本被插入");
    }
    @Override
    public void removeUpdate(DocumentEvent e) {
        System.out.println("文本被删除");
    }
    @Override
    public void changedUpdate(DocumentEvent e) {
        System.out.println("文本属性改变");
    }
});
// 键盘事件
textArea.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_ENTER) {
            System.out.println("按下了回车键");
        }
    }
});

样式优化技巧

// 设置Tab键大小
textArea.setTabSize(4);
// 设置光标位置
textArea.setCaretPosition(textArea.getText().length());
// 设置不透明(用于透明背景效果)
textArea.setOpaque(true);
// 获取行数
int lineCount = textArea.getLineCount();
// 获取指定行的文本
try {
    int lineStart = textArea.getLineStartOffset(0);
    int lineEnd = textArea.getLineEndOffset(0);
    String firstLine = textArea.getText(lineStart, lineEnd - lineStart);
} catch (BadLocationException e) {
    e.printStackTrace();
}

常见问题解决

  • 文本不显示滚动条: 确保放在 JScrollPane 中
  • 自动换行不生效: 设置 setLineWrap(true)
  • 中文乱码: 设置正确的字体,如 "微软雅黑"
  • 性能问题: 大量文本时考虑使用 JTextPane 或分段显示

JTextArea 适合普通文本编辑需求,如果需要富文本显示,建议使用 JTextPane 或 JEditorPane。

抱歉,评论功能暂时关闭!