2011-02-09 6 views
1

コードでは、10×10のボタン配列があります。 入れ子のforループを使用して10×10の配列を作成しましたが、ボタンの作成に問題はありません。 また、ボタンaをクリックすると「ボタンクリック」と表示されます。しかし、のボタンをクリックすると、どのように表示されますか?2D配列でどのボタンがクリックされたかを検出するJava

私たちは、actionListenersメソッドとactionPerformedメソッドを使用しています。

答えて

2

イベントでgetSource()メソッドを呼び出すことができます。

ボタンを作成してボタンを作成し、ボタンを作成するときにボタンのそれぞれのインスタンスを作成することができます。Action

0

二つの最も単純なソリューション、おそらくない最高のもの:

独自のリスナーを実装するボタンクラス。

各ボタンをテストして、action.getSource()オブジェクトと等しいかどうかを確認することもできます。 取得したボタンを使用できるようにするには、単に(ButtonClass)をgetSource()にキャストします。

1

私はこれがJButtonであると仮定しています。 setActionCommand( "command" + row + " - " + column)を使用できます。リスナーでは、どのボタンがクリックされたかを知るためにgetActionCommand()と言ってください。

+0

私たちはJButtonを使用していません、それを明確にしないと申し訳ありません。 – Johannes

2

すべてのボタンをリストに入れ(内部ループで簡単に実行できます)、リストをActionListenerで使用できるようにします(例:外部クラスのプロパティとして、私は詳細を提供することはできません)。次に呼び出し:

int buttonIndex = listWithButtons.indexOf(event.getSource()) 

をあなたの一つは、ボタンの正確な座標を知りたい場合は、彼らは式で計算することができます。

int row = buttonIndex/10; 
int col = buttonIndex % 10; 
0

あなたはちょうどこのようgetActionCommandを使用することができます。

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class TestButtons extends JPanel { 

    private static final long serialVersionUID = 1L; 

public TestButtons() { 

    JButton btn1 = new JButton("Btn1"); 
    btn1.addActionListener(new ButtonListener()); 
    add(btn1); 
    JButton btn2 = new JButton("Btn2"); 
    btn2.addActionListener(new ButtonListener()); 
    add(btn2); 

    } 

    public static void main(String[] args) { 
    JFrame frame = new JFrame(); 
    frame.getContentPane().add(new TestButtons()); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(200, 200); 
    frame.setVisible(true); 
    } 
} 

class ButtonListener implements ActionListener { 
    ButtonListener() { 
    } 

    public void actionPerformed(ActionEvent e) { 
     System.out.println(e.getActionCommand()+ " has been clicked"); 
    } 
} 
0

私たちは、actionPerformed内で2d配列を実行し、そこからアクションメソッドを呼び出したネストされたforループを使用しました。これはおそらく最良の解決策ではないでしょう。おそらく別の手法を使用するのが最善ですが、うまくいくようです。

ここには本当に素晴らしいアイデアがありますが、ありがとうございます!

関連する問題