我正在研究Java教程,发现在GridLayout中查找JButton的x / y索引的方法是遍历与布局关联的按钮b的二维数组,并检查是否
b[i][j] == buttonReference。
@Override public void actionPerformed(ActionEvent ae) { JButton bx = (JButton) ae.getSource(); for (int i = 0; i < 5; i++) for (int j = 0; j < 5; j++) if (b[i][j] == bx) { bx.setBackground(Color.RED); } }
有没有更简单的方法来获取按钮的X / Y索引?
就像是:
JButton button = (JButton) ev.getSource(); int x = this.getContentPane().getComponentXIndex(button); int y = this.getContentPane().getComponentYIndex(button);
this是GameWindow实例,并且ev在用户按下按钮时触发了ActionEvent。
在这种情况下,它应该得到:x == 2,y == 1
@ GameWindow.java:
package javaswingapplication; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.*; import javax.swing.*; public class GameWindow extends JFrame implements ActionListener { JButton b[][] = new JButton[5][5]; int v1[] = { 2, 5, 3, 7, 10 }; int v2[] = { 3, 5, 6, 9, 12 }; public GameWindow(String title) { super(title); setLayout(new GridLayout(5, 5)); setDefaultCloseOperation(EXIT_ON_CLOSE ); for (int i = 0; i < 5; i++) for (int j = 0; j < 5; j++) { b[i][j] = new JButton(); b[i][j].addActionListener(this); add(b[i][j]); } } @Override public void actionPerformed(ActionEvent ae) { ((JButton)ae.getSource()).setBackground(Color.red); } }
@ JavaSwingApplication.java:
package javaswingapplication; public class JavaSwingApplication { public static void main(String[] args) { GameWindow g = new GameWindow("Game"); g.setVisible(true); g.setSize(500, 500); } }
你已经保存了所有JButton的数组;你可以搜索,ae.getSource()并且拥有职位。
ae.getSource()
for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if( b[i][j] == ae.getSource() ) { // position i,j } } }