Java 从按钮数组中返回选项

Java 从按钮数组中返回选项,java,swing,jbutton,Java,Swing,Jbutton,我有一个从A-Z创建按钮的数组,但我想在 方法返回按下的按钮 这是按钮的原始代码: 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[

我有一个从A-Z创建按钮的数组,但我想在 方法返回按下的按钮

这是按钮的原始代码:

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]);
}
字符串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”};
对于(i=0;i
我不确定您到底想要什么,但如何将钥匙存储在队列中(例如,
Deque
)以及需要轮询已按下按钮的任何方法查询该队列。这样,您也可以获得按钮按下的顺序


或者,您可以在触发事件时接收事件的每个按钮(或调度事件的中心按钮)上注册其他操作侦听器。我可能更喜欢这种方法,但这取决于您的具体要求。

我不确定您到底想要什么,但如何将键存储在队列中(例如,a
Deque
)以及需要轮询已按下按钮的任何方法查询该队列。这样,您也可以获得按钮按下的顺序

或者,您可以在触发事件时接收事件的每个按钮(或调度事件的中心按钮)上注册其他操作侦听器。我可能更喜欢这种方法,但这取决于您的具体要求。

  • ActionListener
    可以返回(Swing中的每个
    Listeners
    )表示
    JButton的
    对象

  • 从这个
    JButton
    可以确定,
    getActionCommand()
    getText()

      • ActionListener
        可以返回(Swing中的每个
        Listeners
        )表示
        JButton的
        对象

      • 从这个
        JButton
        可以确定,
        getActionCommand()
        getText()


      尝试更改此侦听器的操作

       JOptionPane.showMessageDialog(null, "You have clicked: "+((JButton)e.getSource()).getText());
      

      尝试更改此侦听器的操作

       JOptionPane.showMessageDialog(null, "You have clicked: "+((JButton)e.getSource()).getText());
      

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

    • 如果要将按钮创建拉入一个方法中,请参见示例中的
      getButton
      方法

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

    • 如果您的问题是“如何创建一个接收字母数组并将最后单击的按钮返回给我的方法”,那么您应该修改您的问题以明确说明这一点。我在这里没有回答这个问题,因为除非你有一个非常特殊的情况,否则这可能不是解决问题的好方法。您可以解释为什么需要这样做,我们可以建议更好的替代方案

    • 例如:

      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();
                  }
              });
          }   
      }
      
      import java.awt.*;
      导入java.awt.event.*;
      导入javax.swing.*;
      公共类项目扩展框{
      /**要使用当前按下的键更新的标签*/
      JLabel输出=新的JLabel();
      公共工程({
      超级(Y_轴框布局);
      
      对于(char i='A';i我不确定你的问题是什么,所以我有几个答案:

    • 如果要将按钮创建拉入一个方法中,请参见示例中的
      getButton
      方法

    • 如果要在单击实际按钮时访问该按钮,可以使用
      ActionEvent.getSource()
      方法(未显示)或在声明期间将该按钮标记为final(如示例所示),从中可以使用该按钮执行任何操作

    • 如果您的问题是“如何创建一个接收字母数组并将上次单击的按钮返回给我的方法”,你应该修改你的问题,明确地说。我在这里没有回答这个问题,因为除非你有一个非常特殊的情况,否则这可能不是解决你正在处理的问题的好方法。你可以解释为什么你需要这样做,我们可以建议一个更好的选择

    • 例如:

      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();
                  }
              });
          }   
      }
      
      import java.awt.*;
      导入java.awt.event.*;
      导入javax.swing.*;
      公共类项目扩展框{
      /**要使用当前按下的键更新的标签*/
      JLabel输出=新的JLabel();
      公共工程({
      超级(Y_轴框布局);
      
      对于(char i='A';i1.首先,在创建按钮时,请将按钮上的文本从A设置为Z

      2.现在,当您的GUI准备就绪后,单击按钮,提取按钮上的文本,然后显示您已单击此按钮的消息

      例如:

      我正在向您展示如何提取按下按钮的名称,我正在使用
      getText()
      方法

      butt.addActionListener(new ActionListener(){
      
         public void actionPerformed(ActionEvent e)
             {
      
             JOptionPane.showMessageDialog(null, "You have clicked: "+butt.getText());
      
             }
      
      
         });
      

      1。首先,在创建按钮时,请将按钮上的文字从A设置为Z

      2.现在,当您的GUI准备就绪后,单击按钮,提取按钮上的文本,然后显示您已单击此按钮的消息

      例如:

      我正在向您展示如何提取按下按钮的名称,我正在使用
      getText()
      方法

      butt.addActionListener(new ActionListener(){
      
         public void actionPerformed(ActionEvent e)
             {
      
             JOptionPane.showMessageDialog(null, "You have clicked: "+butt.getText());
      
             }
      
      
         });
      

      要从A-Z定义按钮数组,您不需要定义字符串数组。只需初始化
      char title='A';
      ,然后将循环迭代到26和26即可