从Java中的另一个类获取方法

从Java中的另一个类获取方法,java,class,methods,add,Java,Class,Methods,Add,我是Java新手,如果这是你听过的最愚蠢的事情,请容忍我 所以,我基本上是用Java创建一个表单。当它被提交时,它将被验证,如果出现错误,我希望特定的表单项变为红色。我通过调用方法setAsError()成功地做到了这一点 但问题是,我的表单项(包括文本字段、组合框和其他swing类)已经扩展了Java组件 public class KComboBox extends JComboBox { public KComboBox(String[] s){ super(s); //T

我是Java新手,如果这是你听过的最愚蠢的事情,请容忍我

所以,我基本上是用Java创建一个表单。当它被提交时,它将被验证,如果出现错误,我希望特定的表单项变为红色。我通过调用方法setAsError()成功地做到了这一点

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

public class KComboBox extends JComboBox {

public KComboBox(String[] s){
    super(s);
    //There's other stuff in here too
}
我想将setAsError()方法添加到我的表单项中。我意识到我可以单独将该方法添加到所有必要的类中,但这对于OO编程来说似乎有点奇怪

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

myFormItem.setAsError()
场地应该变成红色


任何帮助都将不胜感激。

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

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

比如:

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()
)发送消息时,即使您不知道它是什么特定类型的
JComboBox
JTextarea
。这就是所谓的多态性

作为旁注,请举例说明接口如何在您的案例中提供帮助


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

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

比如:

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()
)发送消息时,即使您不知道它是什么特定类型的
JComboBox
JTextarea
。这就是所谓的多态性

作为旁注,请举例说明接口如何在您的案例中提供帮助


您最好的选择是创建一个接口。只要写

Interface SetAsErrorable{
    void setAsError();
}

在全局范围内(或在其自己的文件中)。然后添加到所有表单项类
实现SetAsErrorable
。IE
KComboBox扩展JComboBox实现SetAsErrorable{

您最好的选择是创建一个接口。只需编写

Interface SetAsErrorable{
    void setAsError();
}
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);
    }
}  
在全局范围内(或在其自己的文件中)。然后添加到所有表单项类
implements SetAsErrorable
。IE
KComboBox extendsJComboBox implements SetAsErrorable{

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()
,您就可以实现所需的功能

现在,假设您发现用户将表单中的“name”字段留空。 当他/她单击提交按钮时,我确信您正在检查是否存在空条件

if(nameField.getText().equals("")){
    this.setAsError(nameField);
}  
现在,我非常确定,一旦发现错误已从该字段消失,您需要将背景颜色重置为原来的颜色,因此我建议您也进行
resetError(JComponent compo)
重置颜色为默认值。
现在,从Windows到Mac再到Ubuntu,背景颜色可能会有所不同。您需要做的是在应用程序开始时获取背景颜色,并将其存储。
错误条件消失后,将其设置为存储的默认值

只需将
JComponent
参数添加到
setError()
,您就可以实现所需的功能

现在,假设您发现用户将表单中的“name”字段留空。 当他/她单击提交按钮时,我确信您正在检查是否存在空条件

if(nameField.getText().equals("")){
    this.setAsError(nameField);
}  
现在,我非常确定,一旦发现错误已从该字段消失,您需要将背景颜色重置为原来的颜色,因此我建议您也进行
resetError(JComponent compo)
重置颜色为默认值。
现在,从Windows到Mac再到Ubuntu,背景颜色可能会有所不同。您需要做的是在应用程序开始时获取背景颜色,并将其存储。

当错误条件消失后,将其设置为存储的默认值。

听起来使用接口会很好

public interface errorInterface {
 public setAsError();
}

public class KComboBox extends JComboBox implements errorInterface {

 @Override
 setAsError() {
    this.setBackground(new Color(230,180,180));
 }
}

听起来使用界面会很好

public interface errorInterface {
 public setAsError();
}

public class KComboBox extends JComboBox implements errorInterface {

 @Override
 setAsError() {
    this.setBackground(new Color(230,180,180));
 }
}


谢谢你的帮助。但是,如果我使用接口来实现它,我不需要在它实现的所有类中单独编写方法吗?我想知道是否有办法避免这种情况。@KaneelDias看看我关于如何在没有接口的情况下实现它的答案:-)你的类有相同的方法实现吗?你为什么要尝试避免接口?这不是一个大问题。我只是不希望有任何重复的代码运行(从那时起,在实现接口的所有类中,我将不得不单独编写方法)。谢谢你的帮助。但是,如果我使用接口来实现它,我不需要在它实现的所有类中单独编写方法吗?我想知道是否有办法避免这种情况。@KaneelDias看看我关于如何在没有接口的情况下实现它的答案:-)你的类有相同的方法实现吗?你为什么要尝试避免接口?这不是什么大问题。我只是不希望有任何重复的代码运行(从那时起,在实现接口的所有类中,我必须分别编写方法)。尽量避免
instanceof
@MaximShoustin,然后OP将不得不求助于
getClass().getName()
:)这似乎很有趣,在搜索时从未看到过这样的答案。不过,在这个解决方案中,快速提问setAsError()方法将进入哪个类?我希望这样做的方式不会重复。在
JFrame
类:)
挫折背景(颜色)
组件的一种方法,因此