【发布时间】: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