0

我是 Java 新手,所以如果这是你听过的最愚蠢的话,请多多包涵。

所以,基本上我正在用 Java 创建一个表单。当它被提交时,它被验证,如果有错误,我希望特定的表单项变成红色。我通过调用方法 setAsError() 设法做到了

public void setAsError(){
    this.setBackground(new Color(230,180,180));
}

但问题是,我的表单项(包括文本字段、组合框和其他摆动类)已经扩展了 Java 组件。

public class KComboBox extends JComboBox {

public KComboBox(String[] s){
    super(s);
    //There's other stuff in here too
}

我想将 setAsError() 方法添加到我的表单项中。我意识到我可以将方法单独添加到所有必要的类中,但这对于 OO 编程来说似乎有点奇怪。

无论如何,最终结果应该是,当我这样做时

myFormItem.setAsError()

该字段应变为红色。

任何帮助将不胜感激,并在此先感谢。

4

4 回答 4

4

Java 支持多接口继承,它允许一个对象从不同的接口继承许多方法签名。

interface因此,使用setAsError方法 add 为所有相关类创建新的实现。

就像是:

public interface ErrorItf {
 public void setAsError();
}

之后,将其添加到您的课程中:

public class KComboBox extends JComboBox implements ErrorItf{

...

  @override
  public void setAsError(){
    this.setBackground(new Color(230,180,180));
  }

}

现在改为调用您的类,通过接口调用,例如:

ErrorItf element = getComboBox();
element.setAsError(); 

当您向对象(又名)发送消息时,element.setAsError()即使您不知道它是什么具体类型JComboBoxJTextarea... 。这叫多态

作为旁注,示例界面如何在您的情况下提供帮助

在此处输入图像描述

于 2013-10-05T15:08:35.753 回答
1
public void setAsError(JComponent component){
    if(component instanceof JTextField){
    JTextField field =  (JTextField) component;
    field.setBackground(Color.RED);
    }else if(component instance of JTextArea){
    JTextArea area = (JTextArea) component;
    area.setBackground(Color.RED);
    }
}  

通过简单地添加一个JComponent参数到你的setError(),你可以实现你想要的。

现在,假设您发现用户将表单中的“姓名”字段留空。当他/她单击提交按钮时,我确定您正在检查空状态。

if(nameField.getText().equals("")){
    this.setAsError(nameField);
}  

现在,我很确定您需要将背景颜色重置为您发现错误已从该字段消失后的颜色,因此我建议您也设置一个resetError(JComponent compo)将颜色重置为默认值的位置。
现在,背景颜色可以从 Windows 到 Mac 再到 Ubuntu。您需要做的是在应用程序开始时获取背景颜色并存储它。
当错误情况消失后,将其设置为您存储的默认值。

于 2013-10-05T15:10:27.183 回答
0

你最好的选择是创建一个界面。写吧

Interface SetAsErrorable{
    void setAsError();
}

在全局范围内(或在其自己的文件中)。然后添加到所有表单项类implements SetAsErrorable。即KComboBox extendsJComboBox implements SetAsErrorable{

于 2013-10-05T15:08:49.947 回答
0

听起来像使用界面会很好......

public interface errorInterface {
 public setAsError();
}

public class KComboBox extends JComboBox implements errorInterface {

 @Override
 setAsError() {
    this.setBackground(new Color(230,180,180));
 }
}
于 2013-10-05T15:10:32.817 回答