如何在GridLayout中获取元素的X和Y索引?
2022-09-03 04:16:33
						我正在研究一个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 实例,并且当用户按下按钮时触发的 ActionEvent。ev

在这种情况下,它应该得到: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);
  }
}
 
					 
				
 
				    		 
				    		 
				    		 
				    		