假设我有5 JTextField:jTextField1,jTextField2.
现在,我希望它们在DocumentListener上的行为是相同的,所以我决定只制作一个DocumentListener,并将其设置为5个组件。
与此同时,我要做的是:
jTextField1.getDocument().putProperty("owner", jTextField1);
jTextField2.getDocument().putProperty("owner", jTextField2);
..
..我有个听众:
DocumentListener documentListener = new DocumentListener() {
public void changedUpdate(DocumentEvent arg0)
{
Object owner = arg0.getDocument().getProperty("owner");
enableDetachButton(getContentPane());
changeColor((JTextField) owner);
}
public void insertUpdate(DocumentEvent arg0)
{
Object owner = arg0.getDocument().getProperty("owner");
enableDetachButton(getContentPane());
changeColor((JTextField) owner);
}
public void removeUpdate(DocumentEvent arg0)
{
Object owner = arg0.getDocument().getProperty("owner");
enableDetachButton(getContentPane());
changeColor((JTextField) owner);
}
};最后,我要:
jTextField1.getDocument().addDocumentListener(documentListener);
..
..这个方法可以吗?我能做些什么改进呢?
发布于 2013-05-08 05:29:44
差不多没问题了。在DocumentListener的所有3种更新方法中,您都在执行相同的操作,因此我建议在其中创建一个新的私有方法,并从所有3种更新方法中调用它。这样,您就可以避免代码重复,而且以后只需要更改一个位置,而不必维护相同的代码3次。
DocumentListener listener = new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
doStuff(e);
}
@Override
public void insertUpdate(DocumentEvent e) {
doStuff(e);
}
@Override
public void changedUpdate(DocumentEvent e) {
doStuff(e);
}
private void doStuff(DocumentEvent e) {
Object owner = e.getDocument().getProperty("owner");
enableDetachButton(getContentPane());
changeColor((JTextField) owner);
}
});https://codereview.stackexchange.com/questions/25895
复制相似问题