我想知道是否还有其他方法可以处理N个控件中的任何一个控件和事件,这些控件会读取ActionCommand值并根据该值进行操作。到目前为止,我基本上已经定义了ActionListener,将其分别添加到每个控件中。例如,如果我有50个复选框,我想编写一个类似

void process(){
    getCommandValueAndDoSth();
}


而不是实例化所有复选框的ActionListener,我只想控制所有复选框。

最佳答案

您可以为所有组件配备一个侦听器。

ActionListener al = new ActionListener {
  @Override
  public void actionPerformed(ActionEvent e) {
    // either do it like this
    process(e.getActionCommand());
    // or like this to distinguish between the controls
    if (e.getSource() == firstElement) processChangeInFirstElement();
    else if (e.getSource() == secondElement) processChangeInSecondElement();
    // etc
  }
}

Component firstElement = new JCheckBox("asdf");
firstElement.addActionListener(al);

Component secondElement = new JTextField();
secondElement.addActionListener(al);


如果需要具有多种类型的侦听器(ChangeListener, MouseListener, ActionListener, KeyListener, ...),则每种侦听器类型都有一个实例,并将它们应用于相应的组件。

关于java - Java Swing-多个控件使用相同的处理程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11903377/

10-14 08:07