我需要将4个随机字母分配给16个中的4个随机jbuttons。我现在拥有的是在所有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);
}
}
}
答案 0 :(得分:0)
您的代码存在一些问题:
char[] letter = new char[1];
for (int i = 0; i < letter.length; i++) {
char c = (char) (rnd.nextInt(26) + (65));
letter[i] = c;
}
我的假设是您要生成并存储随机字母列表。使用上面的代码,你只需要分配一个大小为1的字符数组。因此,你的问题首先从这里开始,因为你只生成并存储一个随机字母(你的for
循环在迭代一次后终止letter.length
等于1)。相反,您可能想要将字符数组初始化为要显示的按钮数(即:16),或者,如果您不知道有多少按钮,那么您将需要存储数据在List<Character>
和add
中随机生成的字符,以便以后可以调用它们。
您的下一个问题是您通过以下方式转换为字符串:
String text = new String(letter);
如果您在letter
表示字符数组的情况下阅读the documentation:
分配一个新的String,使其表示当前包含在字符数组参数中的字符序列。复制字符数组的内容;后续修改字符数组不会影响新创建的字符串。
换句话说,即使代码的第一部分正确生成了随机字符数组,您现在也创建了一个包含数组中每个字符串联的字符串。
相反,要将字符转换为字符串,您实际上可以执行以下简单操作:
String.valueOf('a');
因此,将所有内容组合在一起,首先需要正确生成和存储随机字符,然后需要将字符正确转换为字符串类型,然后需要调用这些值以便将它们分配给每个按钮。