You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 8 Swing:如何实现J(Formatted)TextField不可直接编辑且保留白色背景?

实现不可编辑但保持白色背景的JFormattedTextField(Java 8 Swing)

直接用以下步骤就能满足需求,无需复杂的UI扩展或事件拦截:

  • 调用setEditable(false)禁止用户直接输入/删除内容,这是最直接的禁止编辑方式,但会导致背景变灰。
  • 调用setFocusable(false)让组件无法获得焦点,自然不会显示光标。
  • 手动将背景色设置为系统默认的可编辑文本框背景色,用UIManager.getColor("TextField.background")获取,保证和普通可编辑文本框外观一致。
  • 可选:添加外观(LAF)变更监听,避免切换主题时背景色被重置回灰色。

完整代码示例

import javax.swing.*;
import java.beans.PropertyChangeEvent;

public class ReadOnlyFormattedTextFieldDemo {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("ReadOnly JFormattedTextField Demo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));

            // 创建格式化文本框
            JFormattedTextField textField = new JFormattedTextField();
            // 禁止用户手动编辑
            textField.setEditable(false);
            // 移除焦点能力,消除光标
            textField.setFocusable(false);
            // 恢复可编辑文本框的默认背景色
            textField.setBackground(UIManager.getColor("TextField.background"));

            // 监听外观变化,确保背景色始终正确
            textField.addPropertyChangeListener("lookAndFeel", (PropertyChangeEvent evt) -> {
                textField.setBackground(UIManager.getColor("TextField.background"));
            });

            // 测试代码修改值的按钮
            JButton updateBtn = new JButton("更新内容");
            updateBtn.addActionListener(e -> textField.setValue("通过代码修改的内容"));

            frame.add(textField);
            frame.add(updateBtn);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}

方案优势

  1. 完全匹配需求:用户无法手动编辑,但代码可通过setValue()或setText()修改内容。
  2. 外观与普通可编辑文本框一致,不会误导用户。
  3. 无需拦截输入事件,也不用扩展UI类或大量使用instanceof,代码简洁高效。

内容的提问来源于stack exchange,提问作者Cagepi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:48:17