【问题标题】:JTextField constant text when disabled禁用时的 JTextField 常量文本
【发布时间】:2013-08-21 18:51:52
【问题描述】:

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

我有一个包含许多 JTextField 的对话框。它们代表某个对象的状态(我们称之为“模型”)。 在某些情况下,其中一些字段应该被禁用。尽管事实上,“模型”包含这些字段的值,但我不想显示它们(它们无关紧要)。所以,我想在每个禁用字段中设置“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) 构造函数,它将无法工作 - 这个构造函数不应该可用,这不直观
  • 可能还有更多...

我想它应该存在一些其他的方法......你能提供任何提示吗?

【问题讨论】:

  • 为什么不用setVisible(false) 而不是setEnable(false)
  • 不要扩展 Swing 组件。只需更改字段显示的文本,使用禁用文本字段并将其文本同时更改为 n/A 的方法。
  • @Nizil 我同意,但是......客户的要求:D
  • @JBNizet 这正是我目前所拥有的......我认为它存在任何其他更聪明的方式;)
  • 我怀疑 扩展 摆动组件是客户要求 - 这是您的次优解决方案 :-) 提供启用和特殊文本是(演示)模型的任务根据视图的需要。

标签: java swing subclass jtextfield


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2015-09-29
    • 1970-01-01
    相关资源
    最近更新 更多