2014-02-13 83 views
-1

我有一個JMenu,我使用for循環添加項目。項目顯示正確,但是,我不知道如何添加任何類型的監聽器到創建的對象。我不需要在每個項目上添加一個監聽器,只需要JMenu上的監聽器,它將返回我點擊的對象的「名稱」。因此,如果JMenu包含項目「歌曲」,它應該返回String「歌曲」,當我點擊通過JMenu的項目。Java將ActionListener添加到JMenu中,並使用循環項目

我當前的代碼:

JPopupMenu popup = new JPopupMenu(); 
      remove = new JMenuItem("delete"); 
      copyURL = new JMenuItem("copy url"); 
      add = new JMenuItem("add"); 
      edit = new JMenuItem("edit"); 
      addto = new JMenu("add to"); 
      popup.add(add); 
      popup.add(edit); 
      popup.add(addto); 
      popup.add(copyURL); 
      popup.add(remove); 

      for(String x:model.getPlaylist()){ 
       addto.add(x); 
      } 


      if(! gui.display.isRowSelected(row)){ 
       gui.display.changeSelection(row, column, false, false); 
      } 
      popup.show(e.getComponent(),e.getX(),e.getY()); 
      remove.addActionListener(this); 
      copyURL.addActionListener(this); 
      add.addActionListener(this); 
      edit.addActionListener(this); 
      addto.addActionListener(this); 
      }} 

回答

1

您可以創建自己的操作:

interface PlaylistListener { 
    void addToPlaylist(String name); 
} 

class MainClass implements PlaylistListener { 

    private void createJMenu() { 
     addto = new JMenu("add to"); 
     //... 
     for(String x: model.getPlaylist()){ 
      addto.add(new AddToPlaylistAction(x, this)); 
     } 
     //... 
    } 

    @Override 
    void addToPlaylist(String name) { 
     //... 
    } 
} 

class AddToPlaylistAction extends AbstractAction { 
    private String name; 
    private PlaylistListener callback; 

    public AddToPlaylistAction(String name, PlaylistListener callback) { 
        super(name); 
     this.name = name; 
     this.callback = callback; 
    } 

    void actionPerformed(ActionEvent e) { 
     callback.addToPlaylist(name); 
    } 
} 
+0

謝謝!我沒有意識到你可以創建自己的聽衆,但似乎並不複雜! –

+0

終於使它的工作..但即時通訊仍然想知道如何這100%的作品..嗯,感謝您的幫助,我感謝它:-)! –

相關問題