有没有办法获得活动的来源?我知道event.getSource()但是,有没有办法将它转换成字符串?
例如,如果源是一个按钮button1,无论如何都要将值button1赋值给字符串变量? (我正在处理很多按钮,所以,我不能写if语句)
答案 0 :(得分:1)
为了清楚起见:
getSource()
方法返回最初发生事件的对象。您可以使用它来从元素中获取某种属性,例如标签内的文本或按钮的名称。
这些是字符串,但如果您选择这条路线,我会确保您选择的所有组件都是统一的,这些组件将调用ActionListerner
。
这是getActionCommand()
可能派上用场的地方。您可以设置唯一的标识符'创建组件时,以后再访问它们。
JButton button = new JButton("Button");
button.setActionCommand("1");
JButton button = new JButton("Button");
button.setActionCommand("2");
然后你可以使用你喜欢的任何方法比较这些,或者你可以做一些花哨的事情,比如这样(因为你说你不想使用if-else语句):
String command = e.getActionCommand();
int i = Integer.parseInt(command);
switch (i) {
case 1: // do something
break;
}
根据Java文档:
返回与此操作关联的命令字符串。这个字符串允许"模态"组件,用于指定多个命令之一,具体取决于其状态。例如,单个按钮可以在"显示详细信息和#34;之间切换。和"隐藏细节"。源对象和事件在每种情况下都是相同的,但命令字符串将标识预期的操作。
请记住,只有当您使用一个ActionListerner
来处理大量组件时,我才认为这是最佳方法。正如另一个答案所指出的,你可以为每个按钮设置唯一的ActionListeners
。
希望这能帮到你!
答案 1 :(得分:0)
你可以通过构造函数将你想要的任何东西传递给动作监听器,正如DaaaahWhoosh在他的评论中所述。
package com.ggl.fse;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButtonActionListener implements ActionListener {
private String buttonText;
public ButtonActionListener(String buttonText) {
this.buttonText = buttonText;
}
@Override
public void actionPerformed(ActionEvent event) {
// TODO Auto-generated method stub
}
}
buttonText字符串将在actionPerformed方法中可用。
答案 2 :(得分:0)
您可以为每个ActionListener
使用特定的JButton
。试试这段代码:
private static String text;
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(200, 200, 200, 200);
frame.setLayout(new BorderLayout());
JButton button1 = new JButton("Button 1");
button1.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
text = button1.getText();
JOptionPane.showMessageDialog(null, "Text is: " + text);
}
});
JButton button2 = new JButton("Button 2");
button2.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
text = button2.getText();
JOptionPane.showMessageDialog(null, "Text is: " + text);
}
});
frame.add(button1, BorderLayout.NORTH);
frame.add(button2, BorderLayout.SOUTH);
frame.setVisible(true);
}