【问题标题】:How to get specific ID for a JButton?如何获取 JButton 的特定 ID?
【发布时间】:2015-05-14 21:51:35
【问题描述】:

我正在尝试构建一个使用 3x3 按钮网格的程序(使用 Java Swing),因此我使用 GridLayout 和循环来初始化它以创建按钮:

     panel.setBorder(BorderFactory.createEmptyBorder(3,3,5,5))
     panel.setLayout(new GridLayout(3,3,10,10));

    String[] buttons = {"Top Left", "Top Middle", "Top Right", "Middle Left", "Middle", "Middle Right", "Bottom Left", "Bottom Middle", "Bottom Right"};

    for(int i = 0; i < buttons.length; i++) {
        buttray[i] = new JButton(buttons[i]);
        panel.add(buttray[i]);
        buttray[i].addActionListener(this);
    }

按钮加载得很好,但我不明白如何使用 ActionListeners 来区分按钮。当我从打印输出中检查 paramString() 方法时,每个按钮都会给出相同的修饰符:

Top Left
ACTION_PERFORMED,cmd=Top Left,when=1431640106712,modifiers=Button1
Top Middle
ACTION_PERFORMED,cmd=Top Middle,when=1431640107566,modifiers=Button1
Top Right
ACTION_PERFORMED,cmd=Top Right,when=1431640107978,modifiers=Button1

这个修饰符值是否作为按钮的标识符,如果是,我该如何更改它?

【问题讨论】:

    标签: java swing button identification


    【解决方案1】:

    有多种方法可以区分哪个按钮触发了 ActionEvent:

    1. 设置/获取每个按钮的动作命令(如if (e.getActionCommand().equals("Top Left")
    2. 使用 == 比较实例(例如 if (e.getSource() == buttray[0] )
    3. 获取JButton的文本(例如if (e.getSource().getText().equals("Top Left")
    4. 设置/获取 JButton 的名称(例如 if (e.getSource().getName().equals("Top Left")
    5. 为每个按钮添加不同的 ActionListener(换句话说,按钮的 1:1 侦听器)
    6. ...也许在下面的 cmets 部分会添加更多方法。

    【讨论】:

    • putClientProperty(...)getClientProperty(...)
    【解决方案2】:

    您已经通过数组索引(即 buttray[i])跟踪按钮。使用 getSource()

       public void actionPerformed(ActionEvent e) 
    {
        // TODO Auto-generated method stub
        for(int i=0;i<buttray.length;i++)
        if(e.getSource()==buttray[i])
        {   
            //code here
        }   
    
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      相关资源
      最近更新 更多