我正在创建一个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