我刚刚为我的保存按钮写了一个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);
}
}
}
}
那我怎么解决这个问题呢?非常感谢你
答案 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);
我会在另一个答案中添加评论,但我的声誉不够高......