Maison >Java >javaDidacticiel >Comment puis-je déterminer efficacement les coordonnées X et Y d'un élément dans un GridLayout ?
Déterminer efficacement les coordonnées des éléments dans un GridLayout
Identifier les coordonnées x et y d'un élément spécifique dans un GridLayout peut souvent poser un défi. Bien qu'une approche courante consiste à parcourir un tableau bidimensionnel de boutons pour établir leur relation, il existe une méthode plus efficace.
Cette approche alternative exploite les méthodes getComponentXIndex() et getComponentYIndex() du composant conteneur. En référençant la source d'un événement, ces méthodes peuvent rapidement fournir les coordonnées souhaitées.
Par exemple, considérons l'extrait de code Java suivant :
JButton button = (JButton) ev.getSource(); int x = this.getContentPane().getComponentXIndex(button); int y = this.getContentPane().getComponentYIndex(button);
Ce code récupère efficacement les x et y indices du bouton en fonction de sa source d'événement.
Dans l'exemple d'application Java Swing fourni, la méthode getGridButton() joue un rôle central dans l'obtention de la référence du bouton. en utilisant efficacement les coordonnées de la grille. De plus, l'écouteur d'action démontre l'équivalence des boutons cliqués et trouvés.
La classe GridButtonPanel améliorée illustre cette approche, où chaque bouton est identifié de manière unique par ses coordonnées dans la grille. En cliquant sur n'importe quel bouton, le code vérifie la cohérence entre les références de bouton attendues et réelles.
package gui; import java.awt.EventQueue; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; /** * @see http://stackoverflow.com/questions/7702697 */ public class GridButtonPanel { private static final int N = 5; private final List<JButton> list = new ArrayList<>(); private JButton getGridButton(int r, int c) { int index = r * N + c; return list.get(index); } private JButton createGridButton(final int row, final int col) { final JButton b = new JButton("r" + row + ",c" + col); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JButton gb = GridButtonPanel.this.getGridButton(row, col); System.out.println("r" + row + ",c" + col + " " + (b == gb) + " " + (b.equals(gb))); } }); return b; } private JPanel createGridPanel() { JPanel p = new JPanel(new GridLayout(N, N)); for (int i = 0; i < N * N; i++) { int row = i / N; int col = i % N; JButton gb = createGridButton(row, col); list.add(gb); p.add(gb); } return p; } private void display() { JFrame f = new JFrame("GridButton"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(createGridPanel()); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new GridButtonPanel().display(); } }); } }
Cette approche améliorée simplifie le processus d'obtention des coordonnées des éléments dans un GridLayout, éliminant le besoin de parcours complexes et améliorant l'efficacité. .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!