我正在創建一個hang子手遊戲。我使用Netbeans中的GUI工具欄製作了一個按鈕A - Z,如下所示: 爪哇Hang子手項目:行動聽衆
我的問題是,我如何添加一個actionlistener到它的所有。是否有可能使用循環?如果我點擊按鈕A,我會得到字符'a'等。
我正在創建一個hang子手遊戲。我使用Netbeans中的GUI工具欄製作了一個按鈕A - Z,如下所示: 爪哇Hang子手項目:行動聽衆
我的問題是,我如何添加一個actionlistener到它的所有。是否有可能使用循環?如果我點擊按鈕A,我會得到字符'a'等。
是的,它可以使用一個循環,但是因爲你的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);
}
}
那麼,用一些僞代碼,這不會讓你覺得嗎?
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
}
你需要的按鈕添加到某種類型的列表,以便您可以遍歷它們,Netbeans的不爲你做這個,當你生成的按鈕。
之後,只需在包含所有按鈕的列表上爲每個循環運行一次。要獲得字符值只投了relevant ascii value,開始於97℃較低的情況下,或65爲大寫答:
int charNum = 97;
for(Button b : board) {
char charVal = (char)charNum;
charNum++;
//add the action listener
}
避免你使用的幻數好得多。爲什麼要擔心Java可以爲你處理這個問題時的ascii值是什麼。我已經將代碼添加到上面的帖子中作爲示例。 – 2011-01-29 13:24:30
+1,但由於該操作是所有的按鈕同樣只需要創建一個ActionListener。應該在循環之外創建監聽器,然後將其添加到循環中的按鈕。 – camickr 2011-01-29 16:32:36