从Java中的另一个类获取方法
我是Java新手,如果这是你听过的最愚蠢的事情,请容忍我 所以,我基本上是用Java创建一个表单。当它被提交时,它将被验证,如果出现错误,我希望特定的表单项变为红色。我通过调用方法setAsError()成功地做到了这一点 但问题是,我的表单项(包括文本字段、组合框和其他swing类)已经扩展了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
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
。IEKComboBox扩展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
。IEKComboBox 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
类:)挫折背景(颜色)
是组件的一种方法,因此