如果单击“ like [i]”按钮时要打印“ i”值,该怎么办?就像我点击“按钮2”时,它应该给我值“ 2”

问题描述

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

public class button_array extends JFrame{
    int i;
    JLabel[] ulb = new JLabel[4];
    JButton[] like = new JButton[4];
    JPanel panel = new JPanel();
    public button_array() {

        new JFrame();
        i =3;
        while(i>0) {
            ulb[i] = new JLabel("user "+i);
            like[i] = new JButton("Button "+i);
            
            
            panel.add(ulb[i]);
            panel.add(like[i]);
            panel.add(Box.createVerticalStrut(25));
            
            like[i].addActionListener(new ActionListener() {
                
                @Override
                public void actionPerformed(ActionEvent e) {
                    // Todo Auto-generated method stub
                    System.out.println(i);
                }
            });
            
            i--;
        }
    
    panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
    add(panel);
    setSize(400,400);
    setVisible(true);
    }
    public static void main(String[] args) {
        new button_array();
    }
}
  1. 如何在执行的操作部分中获取值ID'i'。对于我单击的每个按钮,它的“ i”值为0。
  2. 当我单击“ like [i]”按钮时要打印“ i”值该怎么办。就像我单击“按钮2”时一样,它应该给我值“ 2”

here's a link of screenshot

解决方法

此代码:

    System.out.println(i);

将不起作用,因为当您单击时,由于循环中有i,此时将采用i--等于0的值。

因此,如果要在index中打印JButtonlike[]的{​​{1}},可以在替代actionPerformed中这样做:

@Override
public void actionPerformed(ActionEvent e) {
    JButton o = (JButton)e.getSource();
                    
    for (int j = 0; j < like.length; j++)
    {                        
        if (like[j]!= null && (JButton)like[j] == o)
        {
            System.out.println(j);
        }
    }
}

或仅打印JButton.getText()的数字字符:

@Override
public void actionPerformed(ActionEvent e) {
    JButton o = (JButton)e.getSource();
    String str1 = o.getText();

    String str2 = str1.substring(6,str1.length());
    System.out.println(j);
}