java if语句不在if if(item instanceof nomclass)中工作

时间:2014-12-01 08:04:14

标签: java instanceof

我刚刚为我的保存按钮写了一个actionPerformed,它会将数据保存到arraylists中,但在此之前我必须确保所有字段都不为空,所以如果textfield为空我想显示一个对话框并将所有空红色背景颜色的文本域

这是我的代码

//Field outside constructor
private List<Component> comp;





//inside constructor
comp = getAllComponents(this);
//method
public static List<Component> getAllComponents(final Container c) {
    Component[] comps = c.getComponents();
    List<Component> compList = new ArrayList<Component>();
    for (Component comp : comps) {
        compList.add(comp);
        if (comp instanceof Container)
            compList.addAll(getAllComponents((Container) comp));
    }
    return compList;
}

``

//actionperformed
if(e.getSource() == savebtn){
        for(Component item:comp){
            if(item.isVisible()){
                if(item instanceof JTextField){
                    JTextField txtField = (JTextField)item;
//here is my problem: with no if statement my program works fine and puts all textfields in red but I want to highlight just empty textfields;
                    if(txtField.getText() == null)
                    txtField.setBackground(Color.RED);
                }
            }
        }


    }

那我怎么解决这个问题呢?非常感谢你

2 个答案:

答案 0 :(得分:2)

if(txtField.getText() == null)

此处您没有检查它是否为空,请参阅public String getText()1的文档:

  

返回此TextComponent中包含的文本。如果底层   document为null,将给出NullPointerException。请注意,文字是   不是绑定属性,因此不会触发PropertyChangeEvent   变化。要侦听对文本的更改,请使用DocumentListener。

我会使用DocumentListener代替类似的东西:

myTextField.getDocument().addDocumentListener(new DocumentListener() {

    public void changedUpdate(DocumentEvent e) { checkIfEmpty(); }
    public void removeUpdate(DocumentEvent e) { checkIfEmpty(); }
    public void insertUpdate(DocumentEvent e) { checkIfEmpty();}

    public void checkIfEmpty() {
       if (myTextField.getText().equals("")){
           //set color to red
       } else {
           //set color back
       }   
    }
});

1 还要注意方法的签名,它会返回String

答案 1 :(得分:0)

是的Maroun Maroun是对的,你正在检查字符串是否为空(对象不存在)。但是你想检查String是否为空。我认为另一个答案可以解决您的问题,但更清晰的解决方案是使用isempty方法。

if(txtField.getText().isEmpty())
txtField.setBackground(Color.RED);

我会在另一个答案中添加评论,但我的声誉不够高......