记录在JButtons数组中选择哪个数组

时间:2018-08-21 00:17:38

标签: java arrays jbutton

我的麻烦来自尝试记录选择哪个数组。如图所示,如果我有一个由5个元素组成的数组,则记录选择了第三个元素。在上下文中,我有2个不同的数组,每个数组包含10个元素;一个数组由整数(称为money)组成,另一个数组由JButtons组成。

public class Game extends JFrame {

JPanel cases = new JPanel(new GridLayout(2, 5)); //Section containing game cases
JButton[] caseButton = new JButton[10];                                   // Declaration of the
String gameCase[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};  //    case buttons
int[] money = {1, 2, 5, 10, 100, 1000, 5000, 10000, 20000, 30000}; //money values
}

public void StartGame() {
    Shuffle(money); //Shuffle the money
    //Initialising case buttons
    for (int i = 0; i < caseButton.length; i++) {
        caseButton[i] = new JButton(gameCase[i]);
        cases.add(caseButton[i]);
        caseButton[i].setPreferredSize(new Dimension(100, 100));
        caseButton[i].setFont(new Font("Dialog", Font.BOLD, 35));
        caseButton[i].setForeground(new Color(255, 215, 0));
        caseButton[i].setActionCommand(gameCase[i]);
    }

Money数组在程序开始时进行了改组,以允许每次运行时使用不同的顺序。 我想知道的是,当选择了这些JButton之一时,如何记录选择了哪个Array元素?这样,我便可以使用相应的货币数组进行处理。 (例如,选择了第7个JButton,然后我想将JButton的文本更改为第7个货币数组中保存的数字。) 帮助将不胜感激。这将在下周到期,还有很多事情要做。

2 个答案:

答案 0 :(得分:1)

我建议创建一个自定义按钮类,以保存money数组中相应值的索引。例如:

public class MyButton extends JButton {
    private int moneyIndex;

    public MyButton(String text, int moneyIndex){
        super(text);
        this.moneyIndex = monexIndex;
    }

    public int getMoneyIndex(){
        return moneyIndex;
    }
}

然后,您可以像以前一样创建一个按钮,但是将货币索引传递给它:

for (int i = 0; i < caseButton.length; i++) {
    // I suspect you want the moneyIndex to match the index of the button
    caseButton[i] = new MyButton("?", i);

    cases.add(caseButton[i]);

    // These can be moved to the custom button class if all MyButtons have these customizations
    caseButton[i].setPreferredSize(new Dimension(100, 100));
    caseButton[i].setFont(new Font("Dialog", Font.BOLD, 35));
    caseButton[i].setForeground(new Color(255, 215, 0));

    // Set this class as the action listener
    caseButton[i].setActionListener(this);
}

然后,在您的动作侦听器中(假设您的主类已经扩展了ActionListener),您可以访问moneyIndex变量:

public void actionPerformed(ActionEvent e){
    // Get the source of the click as a MyButton
    MyButton source = (MyButton) e.getSource();

    // Get the moneyIndex of the source button
    int moneyIndex = source.getMoneyIndex();

    // Update the button's text according to the moneyIndex
    source.setText(Integer.toString(money[moneyIndex]));
}

此方法的优点是索引由按钮存储,因此您无需搜索所有按钮即可查看已按下的按钮。随着您拥有的按钮数量的增加,这一点尤为重要,但这是任何大小的考虑。

此外,当该项目变得更加复杂时,此方法将使您的生活更加轻松,因为每个按钮都可以存储特定于它的信息,而无需一堆数组或操作命令。

答案 1 :(得分:0)

替代自定义按钮类解决方案,您可以将按钮及其索引和在动作处理程序上保留在地图中,并根据源获取索引:

    echo convert_accented_characters("Ķas-noķika"); //Output Kas-nokika