将随机字母分配给多个jbuttons

时间:2015-11-17 20:59:07

标签: java arrays swing random jbutton

我需要将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);

        }
    }
}

1 个答案:

答案 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');

因此,将所有内容组合在一起,首先需要正确生成和存储随机字符,然后需要将字符正确转换为字符串类型,然后需要调用这些值以便将它们分配给每个按钮。