获取Java中的事件源

时间:2015-01-22 19:05:14

标签: java swing awt

有没有办法获得活动的来源?我知道event.getSource()但是,有没有办法将它转换成字符串?

例如,如果源是一个按钮button1,无论如何都要将值button1赋值给字符串变量? (我正在处理很多按钮,所以,我不能写if语句)

3 个答案:

答案 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);
}