如何将事件与对象相关联?

时间:2012-09-16 07:30:02

标签: java swing events event-handling

我正在创建这个应用程序,它有各种组件(振荡器,效果)来绘制视觉波形。您可以使用GUI上的控件来更改组件参数。

当您与其中一个控件交互时,我需要更新关联的组件,然后重绘输出。

public JPanel createOscPanel(Osc o)
 {
 JPanel cbPanel = new JPanel(); 
 final String[] comboItems = {"Sine", "Custom", "FSaw", "FSquare"};
 JComboBox cb = new JComboBox(comboItems);
 cbPanel.add(cb); 

 cb.addActionListener(this);

 return cbPanel; 
 }

public void actionPerformed(ActionEvent e) {
    JComboBox cb = (JComboBox)e.getSource();
    int value = cb.getSelectedIndex();

    System.out.println(value); 
} 

在这个例子中 - 我如何传入该振荡器,以便我可以在其上运行setWaveType()方法?

2 个答案:

答案 0 :(得分:2)

创建匿名处理程序并更改createOscPanel的参数。

public JPanel createOscPanel(final Osc o)
 {
   JPanel cbPanel = new JPanel(); 
   final String[] comboItems = {"Sine", "Custom", "FSaw", "FSquare"};
   JComboBox cb = new JComboBox(comboItems);
   cbPanel.add(cb); 

   cb.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e) {
           JComboBox cb = (JComboBox)e.getSource();
           int value = cb.getSelectedIndex();
           o.setWaveType();
           System.out.println(value); 
      } 
    });
  return cbPanel; 
 }

答案 1 :(得分:0)

将其保存为实例/成员变量,您可以从该类中的任何方法访问它。