获取java中事件源对象的名称

时间:2015-08-02 19:53:45

标签: java events event-handling objectname

我正在创建一些事件处理程序并保持清洁,而不是为每个处理程序中的20多个对象提供大量的if ... else,我正在尝试使用一个开关盒。当然,问题是你无法打开一个Object,即event.getSource();返回,并跟随它.toString()返回任何可以轻松用于每种情况的东西。我想知道的是,是否有一种方法可以在字符串中获取事件源对象的名称,该字符串可以在交换机中使用。按钮的文本,而不是它的名称,也可以工作,但我也尝试使用文本框,在这种情况下,只有名称才能真正起作用。我只遇到过一个解决方案,但由于某些原因它无效。

public class EntryHandler implements ActionListener 
{
    @Override
    public void actionPerformed( ActionEvent event ) 
    {
        if( event.getSource() == addEntryButton ) 
        {
            Object source = event.getSource();
            String bString;
            if (source instanceof JButton)
            {
                bString = ((JButton) source).getName();
            } else { 
                bString = "Wrong";
            }
            System.out.printf("b name: %s", bString);
            entryData.addTableEntry();
        }  ... more if's for other buttons...

出于某种原因,这总是打印“b name:null”

我总是可以使用if ... else堆栈,这是当前实现的方式,但它看起来像一个巨大的混乱。任何建议或替代方案将不胜感激。

1 个答案:

答案 0 :(得分:0)

您需要使用setName()来获取事件的组件形式。这样一来,您将不会获得null值,而是会得到将要设置的任何内容。 例如:

JButton jButton =new JButton();
jButton.setName("name");

另一方面,当您收到事件时:

event.getSource().getName();