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

时间:2013-10-05 15:04:14

标签: java class methods add

我是Java的新手,所以如果这是你听过的最愚蠢的事情,请耐心等待。

所以,基本上我是用Java创建一个表单。提交时,它会被验证,如果出现错误,我希望特定的表单项变为红色。我已经设法通过调用方法setAsError()

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

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

public class KComboBox extends JComboBox {

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

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

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

myFormItem.setAsError()

该字段应变为红色。

任何帮助将不胜感激,并提前感谢。

4 个答案:

答案 0 :(得分:4)

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

因此,为所有相关类创建具有interface方法添加工具的新setAsError

类似的东西:

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 ...的具体类型。这叫做多态

作为旁注,示例界面如何帮助您的案例

enter image description here

答案 1 :(得分: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不同。您需要做的是在应用程序开始时获取背景颜色并存储它 当错误条件消失时,将其设置为您存储的默认值。

答案 2 :(得分:0)

这里最好的选择是创建一个界面。只需写下

Interface SetAsErrorable{
    void setAsError();
}

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

答案 3 :(得分:0)

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

public interface errorInterface {
 public setAsError();
}

public class KComboBox extends JComboBox implements errorInterface {

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