禁用时的JTextField常量文本

时间:2013-08-21 07:37:36

标签: java swing subclass jtextfield

我正在寻找一些解决问题的聪明方法。我没有在网上找到任何解决方案。其实我会问你任何提示,线索......

我有一个包含许多JTextFields的对话框。它们代表一些对象的状态(让我们称之为“模型”)。 在某些情况下,应禁用其中一些字段。尽管如此,“模型”包含这些字段的值,我不想显示它们(它们是无关紧要的)。所以,我想在每个禁用的字段中设置“n / A”值(总是在它被禁用时)。

我唯一的想法是创建CustomJTextBox extends JTextBox并覆盖setText()方法:

class CustomTextField extends JTextField {
    //... constructors
    @Override
    public void setText(String s){
        if(!this.isEnabled()){
            super.setText("n/A");
        } else {
            super.setText(s);
        }
    }
}

但它有很多弱点:D

  • 仅在使用setText()
  • 时才有效
  • 如果我使用CustomTextFIeld(String s)构造函数,它将无效 - 这个构造函数不应该是不可用的
  • 可能还有更多...

我想它应该存在其他一些approch ......你能给出任何提示吗?

1 个答案:

答案 0 :(得分:2)

使用static factory method,而不是扩展JTextComponent,讨论here。在工厂中,添加一个DocumentListener来强制执行您的要求。