1

AZ からボタンを作成する配列がありますが、押されたボタンを返すメソッドで使用したいと考えています。

これはボタンの私の元のコードです:

String  b[]={"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"};
for(i = 0; i < buttons.length; i++)
{
    buttons[i] = new JButton(b[i]);
    buttons[i].setSize(80, 80);
    buttons[i].setActionCommand(b[i]);
    buttons[i].addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            String choice = e.getActionCommand();
            JOptionPane.showMessageDialog(null, "You have clicked: "+choice);
        }
    });
    panel.add(buttons[i]);
}
4

5 に答える 5

2
  • ActionListenerListeners( Swing ではすべて)Objectを返すことができます。JButton

  • これからJButton決定することができます、getActionCommand()またはgetText()

于 2012-08-24T11:23:51.513 に答える
2

ご質問の内容がよくわからなかったので、いくつか回答します。

  1. ボタンの作成をメソッドにプルする場合getButtonは、例のメソッドを参照してください

  2. クリックされたときに実際のボタンにアクセスしたい場合は、ActionEvent.getSource()メソッド (図示されていません) を使用するか、宣言中にボタンを final としてマークすることによって実行できます (例を参照)。そこから、ボタンを使って何でもできます。

  3. 「文字の配列を取り、最後にクリックされたボタンを返すメソッドを作成するにはどうすればよいですか」という質問がある場合は、質問を変更して、それを明示的に言う必要があります。あなたが非常に特別な状況でない限り、あなたが取り組んでいる問題への良いアプローチではないかもしれないので、ここでは答えませんでした. なぜそうする必要があるのか​​を説明していただければ、より良い代替案を提案できます。

例:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TempProject extends Box{
    /** Label to update with currently pressed keys */
    JLabel output = new JLabel();

    public TempProject(){
        super(BoxLayout.Y_AXIS);
        for(char i = 'A'; i <= 'Z'; i++){
            String buttonText = new Character(i).toString();
            JButton button = getButton(buttonText);
            add(button);
        }
    }

    public JButton getButton(final String text){
        final JButton button = new JButton(text);
        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null, "You have clicked: "+text);
                //If you want to do something with the button:
                button.setText("Clicked"); // (can access button because it's marked as final)
            }
        });
        return button;
    }

    public static void main(String args[])
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
                frame.setContentPane(new TempProject());    
                frame.pack();
                frame.setVisible(true);
                new TempProject();
            }
        });
    }   
}
于 2012-08-24T14:03:58.607 に答える
1

あなたが何を望んでいるのか正確にはわかりませんが、キーをキュー(たとえば a Deque<String>)に格納し、押されたボタンをポーリングする必要があるメソッドはそのキューにクエリを実行します。このようにして、ボタンを押す順序も取得できます。

または、各ボタン (またはイベントをディスパッチする中央のボタン) に他のアクション リスナーを登録して、イベントが発生した瞬間にイベントを受信することもできます。私はおそらくこのアプローチを好むでしょうが、それはあなたの正確な要件に依存します。

于 2012-08-24T11:22:20.200 に答える
0

アクションリスナーをこれに変更してみてください

 JOptionPane.showMessageDialog(null, "You have clicked: "+((JButton)e.getSource()).getText());
于 2012-08-24T11:43:14.647 に答える
0

1.最初にボタンを作成するときに、A から Z までのテキストを設定してください。

2. GUI の準備がすべて整ったら、ボタンをクリックし、ボタン上のテキストを抽出して、このボタンをクリックしたことを示すメッセージを表示します。

例えば:

押されたボタンの名前を抽出する方法を示しています。getText()メソッドを使用しています

butt.addActionListener(new ActionListener(){

   public void actionPerformed(ActionEvent e)
       {

       JOptionPane.showMessageDialog(null, "You have clicked: "+butt.getText());

       }


   });
于 2012-08-24T18:00:11.217 に答える