我目前有一组按钮,当按下它们时,用它们的值更新数组的元素,然后关闭包含它们的帧。
目前,他们的行动如下:
...
svwnb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
input[5] = svwnb.getText();
dftframe.setVisible(false);
}
});
blypb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
input[5] = blypb.getText();
dftframe.setVisible(false);
}
});
pw91b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
input[5] = pw91b.getText();
dftframe.setVisible(false);
}
});
b97db.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
input[5] = b97db.getText();
dftframe.setVisible(false);
}
});
pbepbesolb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
input[5] = pbepbesolb.getText();
dftframe.setVisible(false);
}
});
...
有没有办法将其简化为一个简单的方法?我有一种感觉,我需要使用getSource()
方法,但我没有构建像这样的动作方法的经验。
为了更简洁,我知道代码看起来像下面的伪代码:
public void actionPerformed(ActionEvent e){
input[5] = e.getSource().getText();
dftframe.setVisible(false);
}
我只是不知道如何生成此代码。
答案 0 :(得分:2)
您可以通过以下方式定义ActionListener:
ActionListener commonListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
Object o = e.getSource();
if (o instanceof JTextField) {
JTextField textField = (JTextField)o;
input[5] = textField.getText();
textField.setVisible(true);
}
}
};
通过将其添加到每个组件来使用它:
svnwnb.addActionListener(commonListener);
...
答案 1 :(得分:1)
你的psudo代码中还有一个额外的e
,否则一切都应该正常。
input[5] = e.getSource().e.getText();
^
这应该是
input[5] = e.getSource().getText();
您可能需要额外投射到e.getSource()之类的东西(不确定是否需要)
input[5] = ((JButton)e.getSource()).getText();
在ActionEvent中还有一个getActionCommand方法可以使用,但只有在按钮中设置了正确的actionCommand时它才会起作用。
答案 2 :(得分:-1)
回顾源对象真的很脏。除此之外,来源通常令人惊讶或无证。只需为每个按钮使用不同的侦听器实例:
addTextAction(svwnb);
addTextAction(blypb);
addTextAction(pw91b);
addTextAction(b97db);
addTextAction(pbepbesolb);
...
private void addTextAction(final AbstractButton button) {
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
input[5] = button.getText();
dftframe.setVisible(false);
}
});
}
(将按钮与文本链接似乎有点令人讨厌。应该明白如何在这里拆分(如果你试图通过获取事件源来破解它,那就更不用了)。)