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
  • ActionListener可以返回(每个Listeners在 Swing 中)Object代表JButton

  • 由此JButton你可以确定,getActionCommand()或者getText()

于 2012-08-24T11:23:51.513 回答
2

我不确定你的问题是什么,所以我有几个答案:

  1. 如果您想将按钮创建拉入一个方法 - 请参阅getButton示例中的方法

  2. 如果您想在单击时访问实际按钮,您可以通过使用ActionEvent.getSource()方法(未显示)或在声明期间将按钮标记为最终按钮(如示例所示)来实现。从那里你可以用按钮做任何你想做的事情。

  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 回答