返回点击按钮的索引?

我有一个30个按钮[]的数组。 我有一个变量buttonClicked。 当我按下按钮时,如何获取索引并将索引号存储在buttonClicked中?

谢谢 :)

JButton [] buttons = new JButton[30]; for(int i = 1; i  10 && i <= 20) ? (31 - i) : i; System.out.printf("i = %d, btnNumber = %d%n", i, btnNumber); buttons[btnNumber - 1] = new JButton("label " + btnNumber); //buttons[btnNumber - 1].setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); buttons[btnNumber - 1].setBorder(BorderFactory.createEtchedBorder()); buttons[btnNumber - 1].setOpaque(true); buttons[btnNumber - 1].setBackground(Color.white); //Puts the player 1 piece on button 1,3,5,7,9 and player 2 piece on button 2,4,6,8,10 if ((btnNumber - 1) < 10) { if (((btnNumber - 1) % 2) == 0) { buttons[btnNumber - 1].setIcon(piece1); } else { buttons[btnNumber - 1].setIcon(piece2); } } centerPanel.add(buttons[btnNumber - 1]); } 

//以下是我试图做的事情,我知道这是不正确的。

 public void move() { Move = dice.getDiceResult(); int buttonClicked = 0; if(playerOneTurn =true) { buttonclicked + diceResult(); } 

//修订

 public class MyActionListener implements ActionListener { Dice dice; private boolean playerOneTurn = true; private boolean playerTwoTurn = false; @Override public void actionPerformed(ActionEvent e) { String num = e.getActionCommand(); int index = Integer.parseInt(num); int move = dice.getDiceResult(); int positionLanding = 0; if(playerOneTurn = true) { positionLanding = index + move; positionLanding.setIcon("piece1");//how can I set the image Icon to this position? } } } 

1) putClientProperty

 buttons[i][j].putClientProperty("column", i); buttons[i][j].putClientProperty("row", j); buttons[i][j].addActionListener(new MyActionListener()); 

和getClientProperty

 public class MyActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { JButton btn = (JButton) e.getSource(); System.out.println("clicked column " + btn.getClientProperty("column") + ", row " + btn.getClientProperty("row")); } 

2) ActionCommand

您可以在ActionEvent.getSource()找到该按钮。 要查找索引,只需迭代数组,查找该特定按钮即可。

最漂亮的方法是使用Component.setName。 然后你甚至不需要用你的组件维护变量 – 你可以直接从名字开始

我更喜欢aioobe建议的策略,但这是另一种方式。

 buttons[btnNumber - 1] = new JButton("label " + btnNumber); buttons[btnNumber - 1].setActionCommand("" + btnNumber); // ... // ...later.. in the actionPerformed() method String num = actionEvent.getActionCommand(); int index = Integer.parseInt(num); // ..proceed..