【发布时间】:2015-11-17 20:59:06
【问题描述】:
我需要将 4 个随机字母分配给 16 个随机按钮中的 4 个。我目前拥有的是在所有 16 个按钮上放置相同的随机字母。感谢您的帮助!
import java.awt.GridLayout;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GameG implements Runnable {
public static JButton jba;
public static JPanel jp;
@Override
public void run() {
JFrame jf = new JFrame("Keybricks");
Random rnd = new Random();
jp = new JPanel();
jp.setLayout(new GridLayout(4, 1));
jf.setSize(300, 600);
jf.setVisible(true);
jf.setResizable(false);
jf.add(jp);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
char[] letter = new char[1];
for (int i = 0; i < letter.length; i++) {
char c = (char) (rnd.nextInt(26) + (65));
letter[i] = c;
}
String text = new String(letter);
JButton[] buttons = new JButton[16];
for (int i = 0; i < buttons.length; i++) {
JButton jba = new JButton(text);
jba.addKeyListener(new KeyL());
jp.add(jba);
}
}
}
【问题讨论】:
-
您能否将代码拆分为 a) 一个生成四个随机字母的方法(例如作为列表返回)和 b) 一个随机选择四个 JButton 并将它们也作为列表返回的方法?如果您这样,您只需要遍历列表并将字母分配给相应的按钮。不好,但方法很简单。
-
不要将 KeyListener 与 JButton 一起使用,使用 ActionListerner,如果您“真的”需要知道何时为按钮键入给定键,那么您应该使用键绑定。至于您的问题,生成一个随机布尔值(0 或 1)或使用随机,当为真并且如果计数小于 4,则生成一个随机字符并更新计数
-
还建议在整个过程中使用相同的
Random对象。虽然仍然是可变的,但四个单独的Random对象的初始值可以小于(伪)随机。 -
@MadProgrammer 它会在哪里抛出异常?看起来一切都达到了它的最大界限而不是过去。虽然我承认生成随机字符的方法有点古怪,但应该可行
-
@phflack 好的,我绊倒了
char[] letter = new char[1];,并没有意识到他们正在使用letter.length,以为他们正在使用其他限制
标签: java arrays swing random jbutton