2

私はハングマンのゲームに取り組んでいます。26 個の JButton の配列を作成しました。それぞれのテキストはアルファベット文字です。ボタンがクリックされたときにボタンの文字を取得し、それを変数に割り当てて、推測されている文字列の文字と比較できるようにしたいと考えています。ActionListener のコードと、ループ内の各ボタンへのアタッチメントを次に示します (「文字」は JButton の配列です)。

public class Hangman extends JFrame
{
    private JButton[] letters = new JButton[26];
    private String[] alphabet = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
            "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
            "U", "V", "W", "X", "Y", "Z"};
    //letters are assigned to JButtons in enhanced for loop
    private String letter;

        class ClickListener extends JButton implements ActionListener
        {
            public void actionPerformed(ActionEvent event)
            {
                  //this is where I want to grab and assign the text
                  letter = this.getText();
                 //I also want to disable the button upon being clicked
            }   
        }

       for(int i = 0; i < 26; i++)
       {
           letters[i].addActionListener(new ClickListener());
           gamePanel.add(letters[i]);
       }
}

ご協力いただきありがとうございます!初めての投稿です。コンピューター サイエンス I の最後のプロジェクトです。

4

1 に答える 1

3

あなたが抱えている当面の問題は、あなたがあなたのClickListener

class ClickListener extends JButton implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
      //this is where I want to grab and assign the text
      letter = this.getText();
      checker(word, letter); //this compares with the hangman word
      setEnabled(false);//I want to disable the button after it is clicked
    }   
}


for(int i = 0; i < 26; i++)
{
    // When you do this, ClickListener is a NEW instance of a JButton with no
    // text, meaning that when you click the button and the actionPerformed
    // method is called, this.getText() will return an empty String.
    letters[i].addActionListener(new ClickListener());
    gamePanel.add(letters[i]);
}

リスナーを拡張する必要はありませんJButton

class ClickListener implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
      letter = ((JButton)event.getSource()).getText();
      checker(word, letter); //this compares with the hangman word
      setEnabled(false);//I want to disable the button after it is clicked
    }   
}

さて、個人的には、このようなブラインド キャストを行うのは好きではありません...より良い解決策は、actionCommandプロパティを使用することです...

ClickListener handler = new ClickListener();
for(int i = 0; i < 26; i++)
{
    letters[i].setActionCommand(letters[i].getText());
    letters[i].addActionListener(handler);
    gamePanel.add(letters[i]);
}

class ClickListener implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
      letter = event.getActionCommand();
      checker(word, letter); //this compares with the hangman word
      setEnabled(false);//I want to disable the button after it is clicked
    }   
}
于 2012-12-13T03:37:26.957 に答える