2014-01-12 115 views
0

我有一個GUI在Netbeans ..我唯一的問題是添加事件到我的JMenuItems。我目前裝載在String[]作爲我menulist添加新JMenuItem.length將ActionListener添加到JMenuItem Netbeans?

private void addToGamePanel(){ 
     String[] gameNames = con.getGameNames(); 
     for (int i = 0; i < gameNames.length; i++) { 
     jMenu2.add(new JMenuItem(gameNames[i])); 

     }   
} 

我的問題是那麼如何添加動作事件爲JMenuItem ..我不能設置在GUI窗口中的事件導致項目在gameNames的負載之前不作出。

+0

什麼事件聽衆你想註冊嗎? – Behe

+0

不知道我得到你......但我只是想知道如何添加事件/ actionPerformed到JMenuItems ..一個朋友說了一些關於一個聽衆,但我真的不知道如何.. – HOervald

+0

你正在爲每個添加一個菜單項item [] gameNames。你是否也有一組事件監聽器?或者他們都應該使用相同的聽衆? – Behe

回答

0

您必須將每個菜單項傳遞給動作偵聽器。一種可能是讓您的班級實施ActionListener界面並定義方法actionPerformed

class YourClass implements ActionListener { 

    [...] 

    private void addToGamePanel(){ 

     String[] gameNames = con.getGameNames(); 
     for (int i = 0; i < gameNames.length; i++) { 

      JMenuItem item = new JMenuItem(gameNames[i]) 
      item.addActionListener(this); 
      jMenu2.add(item); 
     }   
    } 

    public void actionPerformed(ActionEvent e) { 
     JMenuItem menuItem = (JMenuItem)(e.getSource()); 

     // do something with your menu item 
     String text = menuItem.getText(); 

    } 
} 

在這種情況下,您的類的實例也充當ActionListener。對於簡單的事情,你也可以使用匿名類

private void addToGamePanel(){ 

     String[] gameNames = con.getGameNames(); 
     for (int i = 0; i < gameNames.length; i++) { 
      JMenuItem item = new JMenuItem(gameNames[i]) 
      item.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        JMenuItem menuItem = (JMenuItem) e.getSource(); 
        // do something with your menu item 
        String text = menuItem.getText(); 
       } 
      }); 
      jMenu2.add(item); 
     } 
    } 

如果你有一些更高級的需求,你可以考慮定義一個單獨的ActionListener甚至更好的行動,來看看:How to use Actions

+0

好的,謝謝:)我會嘗試:) – HOervald

+0

問題只是它內部的GUI主..並且已經實現了java.swing – HOervald

+0

考慮事先將這樣的相關信息添加到問題中。什麼問題,是否有錯誤信息?你的意思是主要方法? – Behe