web-dev-qa-db-ja.com

ActionListenerからボタン名を取得しますか?

私はインターネットを精査しましたが、これに対する答えを見つけることができません:

Forループを使用してa1、a2などと呼ばれる36個のボタンを作成し、それぞれに一意のアクションコマンドを同時に割り当てています。

後で、actionPerformed(ActionEvent e)メソッドからボタンの名前を取得したいと思いました。

ActionCommandは簡単に作成できましたが、ボタンの名前も必要です。

どんな助けでも大歓迎です!

編集:

これが私が使用しているコードです:

String letters[] = {"0", "a", "b", "c", "d", "e", "f"};
JButton btn[] = new JButton[35];
int count = 0;


for (int f=1; f < 7;f++){

        for (int i=1; i < 7;i++){
            btn[i] = new JButton(letters[f]+i, cup);
            System.out.println(btn[i]));
            mainGameWindow.add(btn[i]);
            btn[i].addActionListener(this);
            String StringCommand = Integer.toString(randomArrayNum());
            btn[i].setActionCommand(StringCommand);
            count++;
            if(count == 18){
                generateArray();
            }

        }

}

これにより、a1-6、b1-6、c1-6などに対応する6x6グリッド用の36個のボタンが提供されます。

この方法でボタンを作成すると、ボタンを制御できないように見えます。アイコンを割り当てたり、ボタンの名前を取得したりすることはできません。

前もって感謝します。

6
James MV

ボタンの参照をMapに保持します

String letters[] = {"0", "a", "b", "c", "d", "e", "f"};
JButton btn;
int count = 0;

HashMap<String,JButton> buttonCache = new HashMap<String,JButton>();


for (int f=1; f < 7;f++){

    for (int i=1; i < 7;i++){
        btn = new JButton(letters[f]+i, cup);
        mainGameWindow.add(btn[i]);
        btn.addActionListener(this);
        String stringCommand = Integer.toString(randomArrayNum());
        btn.setActionCommand(stringCommand);
        buttonMap.put(stringCommand,btn);
        count++;
        if(count == 18){
            generateArray();
        }

    }

} 

次に、ActionListenerで、コマンドからボタンを元に戻します。

public void actionPerformed(ActionEvent e) {
    String command = ((JButton) e.getSource()).getActionCommand();
    JButton button = buttonCache.get(command);
    if (null != button) {
        // do something with the button
    }
}

編集

5年以上後にこの答えを再検討すると、なぜ私がHashMap:Pを提案したのかわかりません。

このコードはまったく同じことを行い、サードパーティはありませんMap

String letters[] = {"0", "a", "b", "c", "d", "e", "f"};
int count = 0;

for (int f=1; f < 7;f++){
    for (int i=1; i < 7;i++) {
        String stringCommand = Integer.toString(randomArrayNum());
        Button btn = new JButton(letters[f]+i, cup);

        btn.setActionCommand(stringCommand);
        btn.addActionListener(this);
        mainGameWindow.add(btn[i]);

        // NOTE : I have no idea what this is for...
        count++;
        if(count == 18){
            generateArray();
        }
    }
}

ActionListener ..で.

public void actionPerformed(ActionEvent e) {
    JButton button = (JButton) e.getSource();
    String command = button.getActionCommand();

    // do something with the button
    // the command may help identifying the button...
}
10
Yanick Rochon
JButton btnClear = new JButton("clear");
btnClear.addActionListener(this);
btnClear.setName("clear");

//..............
//..............

public void actionPerformed(ActionEvent e) {
   JButton o = (JButton)e.getSource();
   String name = o.getName();
   if (name == "clear")
   {
       euroMillText.setText("");
   }
   else if (name == "eumill")
   {
       getLottoNumbers();
   }
   //JOptionPane.showMessageDialog(null,name);      
}   
16
Rob
String buttonText = ((JButton) e.getSource()).getText()
8

を使用してアイコンを設定できます

((JButton)actionEvent.getSource()).setIcon("imageName.png");

//to get the name of button you can use
ArrayList<String> buttonNames;
buttonNames.add("button"+f+i);
1
vivek

別の3つの選択肢があります

1)道具による

  • JButton[] buttons;

  • ArrayList<JButton> buttons;

ただし、ループから押されたJButtonを判別する必要があります

2)各JButtonに個別のActionListenerを追加します

    myButton.addActionListener(new Java.awt.event.ActionListener() {

        @Override
        public void actionPerformed(Java.awt.event.ActionEvent evt) {
            myButtonActionPerformed(evt);
        }

        private void myButtonActionPerformed(ActionEvent evt) {
            // some Action
        }
    });

3) javax.swing.ActionJButtonに追加します

1
mKorbel

ボタンを配列に格納し、e.getSource()を使用してボタンがどれであるかを判断します...

Private JButton[] buttons;

public void actionPerformed(ActionEvent e) {
    int index = -1;

    for (int i = 0; i < buttons.length; i++) {
        if (e.getSource() == buttons[i]) {
            index = i;
            break;
        }
    }

    if (index == -1) {
        // e didn't come from the buttons
    } else {
        // do stuff
    }
}
1
Sibbo

動作する可能性のある別のオプションは、ボタンのクライアントプロパティを使用することです。基本JComponentクラスは、任意のプロパティの設定/取得を提供します。

Object JComponent.getClientProperty(Object key)
void JComponent.putClientProperty(Object key, Object value)

したがって、コンポーネントにアプリケーション定義のプロパティ値を設定し、ActionListenerメソッド内でそのプロパティ値を問い合わせることができます(イベントのソースがJComponentであることを確認するだけです)。

0
Jere