我是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()
该字段应变为红色。
任何帮助将不胜感激,并提前感谢。
答案 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
...的具体类型。这叫做多态
作为旁注,示例界面如何帮助您的案例
答案 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));
}
}