2011-01-29 20 views
4

ハングマンゲームを作成しています。 NetbeansのGUIツールバーを使ってボタンA〜Zを作成しました。 enter image description hereJavaハングマンプロジェクト:アクションリスナー

私の問題は、どのように私はそれにすべてのアクションリスナーを追加できます。ループを使用することは可能ですか?私がボタンAをクリックすると、文字「a」などが得られます。

答えて

5

はい、ループを使用することが可能であるが、あなたのJButtonががNetBeansのにコード生成を使用して作成されたので、彼らが」勝ちました最初は配列やコレクションに入れておく必要があります。つまり、JButtonの配列を作成し、NetBeansで作成されたボタンでその配列を埋めてください。次に、forループを作成し、そのループ内にActionEventのactionCommand(上記のように)をロジックで使用するActionListenerを追加します。

このように言えば、NetBeanのGUIビルダー(Matisse)の使用を控えて、代わりに手でスイングコードを作成する方がよいと思います。これにより、コードの管理を大幅に強化し、コードの理解を深めることができます。たとえば、このようにすると、forループでボタンを作成し、リスナを追加し、ボタンをコンテナ(JPanel)に追加することができます。あなたがそれらを反復処理できるよう

例えば、

import java.awt.*; 
import java.awt.event.*; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.*; 

public class Foo2 { 
    public static void main(String[] args) { 
     JPanel buttonContainer = new JPanel(new GridLayout(3, 9, 10, 10)); 
     List<JButton> letterButtons = new ArrayList<JButton>(); // *** may not even be necessary 
     for (char buttonChar = 'A'; buttonChar <= 'Z'; buttonChar++) { 
      String buttonText = String.valueOf(buttonChar); 
      JButton letterButton = new JButton(buttonText); 
      letterButton.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
        String actionCommand = e.getActionCommand(); 
        System.out.println("actionCommand is: " + actionCommand); 
        // TODO fill in with your code 
       } 
      }); 

      buttonContainer.add(letterButton); 
      letterButtons.add(letterButton); 
     } 

     JOptionPane.showMessageDialog(null, buttonContainer); 
    } 
} 
+2

+1が、アクションはすべてのボタンでも同じですので、:文字の値は、ちょうど下ケースaまたは大文字のAのための65のために97から始まるrelevant ascii valueを、キャストを取得するには単一のActionListenerを作成する必要があります。リスナーはループ外で作成し、ループ内のボタンに追加する必要があります。 – camickr

3

まあ、いくつかの擬似コードでは、これはあなたにとって意味がありませんか?

for(button in bord) { 
    button.addActionListener(my_actionlistener); 
} 

次に、あなたのActionListenerにボタンが押されたかを確認することができます

public void actionPerformed(ActionEvent e) { 
    // button pressed 
    if ("string".equals(e.getActionCommand()) { 
     // do something 
    } 
    // and so forth 
} 
3

あなたはいくつかの種類のリストにボタンを追加する必要がありますあなたは、ボタンを生成する際、Netbeansのはあなたのためにこれを行いません。

その後、すべてのボタンを含むリストの各ループに対してaを実行します。あなただけ

int charNum = 97; 
for(Button b : board) { 
    char charVal = (char)charNum; 
    charNum++; 
    //add the action listener 
} 
+0

あなたが使っている魔法の数字を避けるほうがずっと良いです。なぜJavaがあなたのためにこれを世話することができるときascii値が何であるかについて心配してください。上記の例にコードを追加しました。 –

+0

これは本当です(あなたのポストにコードが追加されているのを見ることはできませんが)。私のロジックは宿題の問題なので、ちょうど見た目ではなく値段などで何が起きているのかを知るためには、魔法のように。 – berry120

+0

ああ、何かがキャッシュされていた、それは今そこにある! – berry120

関連する問題