我正在创建一些事件处理程序并保持清洁,而不是为每个处理程序中的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堆栈,这是当前实现的方式,但它看起来像一个巨大的混乱。任何建议或替代方案将不胜感激。
答案 0 :(得分:0)
您需要使用setName()
来获取事件的组件形式。这样一来,您将不会获得null值,而是会得到将要设置的任何内容。
例如:
JButton jButton =new JButton();
jButton.setName("name");
另一方面,当您收到事件时:
event.getSource().getName();