这是使用验证特性扩展所有JavaSwingGUI的正确方法吗
不久前,当我编写GUI Swing应用程序时,我创建了18个类。每个类都扩展了一个swing类(JTextField、JList、JTable、JTextArea等),每个类都实现了一个类似的数据访问和验证接口 我的代码行有问题,因为它太长了,无法维护;部分原因是因为许多代码要么是重复的,要么是验证类上有很多愚蠢的条件,比如“if”文本框或“elseif”JList 我想知道是否有任何面向对象的方法可以帮助在抽象类中构造验证代码,这将是很好的。我的18个类都已经扩展了它自己的swing类,这意味着我无法在同一个文件中扩展另一个抽象类这是使用验证特性扩展所有JavaSwingGUI的正确方法吗,java,oop,swing,Java,Oop,Swing,不久前,当我编写GUI Swing应用程序时,我创建了18个类。每个类都扩展了一个swing类(JTextField、JList、JTable、JTextArea等),每个类都实现了一个类似的数据访问和验证接口 我的代码行有问题,因为它太长了,无法维护;部分原因是因为许多代码要么是重复的,要么是验证类上有很多愚蠢的条件,比如“if”文本框或“elseif”JList 我想知道是否有任何面向对象的方法可以帮助在抽象类中构造验证代码,这将是很好的。我的18个类都已经扩展了它自己的swing类,这意味
最后,我希望它保持简单、代码行数短、易于理解,并且在不使用第三方框架的情况下进行尝试(因为这可能会在将来导致问题)。我不确定您尝试了什么,但它是为此而设计的。从人为因素的角度来看,这并不是万能药,但如果应用得当并有可靠的用户反馈,它可能会有所帮助。我们没有太多的上下文可供讨论,老实说,听起来您可能有一些总体设计问题,但有一些技术可以用来清理类似这样的“并行类”。一种是将一个到另一个的映射隔离到一个区域,并根据字段类型创建具体的验证器类 另一个选项是访问者模式。您可以有一个
ValidationVisitable
接口,每个子类都可以实现该接口:
public interface ValidationVisitable {
public void acceptVisitor(ValidationVisitor visitor);
}
//... in your concrete subclass:
public void acceptVisitor(ValidationVisitor visitor) {
visitor.visit(this);
}
然后,visitor类将为每个具体类型的组件提供重载:
public class ValidationVisitor {
public void visit(MyTextField field) {
//validate MyTextField
}
public void visit(MyCheckBox cb) {
//validate MyCheckBox
}
}
我不做验证工作,所以我不能提供一个规范的答案,但你所描述的对我来说并不完全正确。我不明白为什么必须根据您试图实现的行为来扩展任何Swing GUI组件。