问题描述
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();
}
}
- 如何在执行的操作部分中获取值ID'i'。对于我单击的每个按钮,它的“ i”值为0。
- 当我单击“ like [i]”按钮时要打印“ i”值该怎么办。就像我单击“按钮2”时一样,它应该给我值“ 2”
解决方法
此代码:
System.out.println(i);
将不起作用,因为当您单击时,由于循环中有i
,此时将采用i--
等于0的值。
因此,如果要在index
中打印JButton
中like[]
的{{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);
}