2011-01-29 143 views
4

我正在創建一個hang子手遊戲。我使用Netbeans中的GUI工具欄製作了一個按鈕A - Z,如下所示: enter image description here爪哇Hang子手項目:行動聽衆

我的問題是,我如何添加一個actionlistener到它的所有。是否有可能使用循環?如果我點擊按鈕A,我會得到字符'a'等。

回答

5

是的,它可以使用一個循環,但是因爲你的Jbutton將被使用NetBeans代碼生成創建的,他們贏得了」 t最初是在一個數組或集合中,因此這是您必須執行的操作:創建一個JButton數組並使用NetBeans創建的按鈕填充它。然後創建一個for循環並且在該循環中添加一個在其邏輯中使用ActionEvent的actionCommand(如上所述)的ActionListener是一件小事。說到這一點,我認爲更好的解決方案是放棄使用NetBean的GUI構建器(Matisse),而是手動創建Swing代碼。這會讓你更好地控制你的代碼,並且更好地理解它。例如,如果你這樣做,那麼在for循環中你可以創建按鈕,添加監聽器,並將按鈕添加到它的容器(JPanel)。

例如,

import java.awt.*; 
import java.awt.event.*; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.*; 

public class Foo2 { 
    public static void main(String[] args) { 
     JPanel buttonContainer = new JPanel(new GridLayout(3, 9, 10, 10)); 
     List<JButton> letterButtons = new ArrayList<JButton>(); // *** may not even be necessary 
     for (char buttonChar = 'A'; buttonChar <= 'Z'; buttonChar++) { 
      String buttonText = String.valueOf(buttonChar); 
      JButton letterButton = new JButton(buttonText); 
      letterButton.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
        String actionCommand = e.getActionCommand(); 
        System.out.println("actionCommand is: " + actionCommand); 
        // TODO fill in with your code 
       } 
      }); 

      buttonContainer.add(letterButton); 
      letterButtons.add(letterButton); 
     } 

     JOptionPane.showMessageDialog(null, buttonContainer); 
    } 
} 
+2

+1,但由於該操作是所有的按鈕同樣只需要創建一個ActionListener。應該在循環之外創建監聽器,然後將其添加到循環中的按鈕。 – camickr 2011-01-29 16:32:36

3

那麼,用一些僞代碼,這不會讓你覺得嗎?

for(button in bord) { 
    button.addActionListener(my_actionlistener); 
} 

然後在你的ActionListener,你可以看到哪些按鈕被按下

public void actionPerformed(ActionEvent e) { 
    // button pressed 
    if ("string".equals(e.getActionCommand()) { 
     // do something 
    } 
    // and so forth 
} 
3

你需要的按鈕添加到某種類型的列表,以便您可以遍歷它們,Netbeans的不爲你做這個,當你生成的按鈕。

之後,只需在包含所有按鈕的列表上爲每個循環運行一次。要獲得字符值只投了relevant ascii value,開始於97℃較低的情況下,或65爲大寫答:

int charNum = 97; 
for(Button b : board) { 
    char charVal = (char)charNum; 
    charNum++; 
    //add the action listener 
} 
+0

避免你使用的幻數好得多。爲什麼要擔心Java可以爲你處理這個問題時的ascii值是什麼。我已經將代碼添加到上面的帖子中作爲示例。 – 2011-01-29 13:24:30