Elementkoordinaten innerhalb eines GridLayouts effizient bestimmen
Das Identifizieren der X- und Y-Koordinaten eines bestimmten Elements innerhalb eines GridLayouts kann oft eine Herausforderung darstellen. Während ein üblicher Ansatz darin besteht, ein zweidimensionales Array von Schaltflächen zu durchlaufen, um ihre Beziehung herzustellen, gibt es eine effizientere Methode.
Dieser alternative Ansatz nutzt die Methoden getComponentXIndex() und getComponentYIndex() der enthaltenden Komponente. Indem diese Methoden auf die Quelle eines Ereignisses verweisen, können sie schnell die gewünschten Koordinaten bereitstellen.
Bedenken Sie beispielsweise den folgenden Java-Codeausschnitt:
JButton button = (JButton) ev.getSource(); int x = this.getContentPane().getComponentXIndex(button); int y = this.getContentPane().getComponentYIndex(button);
Dieser Code ruft effektiv x und y ab Indizes der Schaltfläche basierend auf ihrer Ereignisquelle.
Im bereitgestellten Java Swing-Anwendungsbeispiel spielt die Methode getGridButton() eine entscheidende Rolle beim Abrufen die Schaltflächenreferenz effizient mithilfe der Rasterkoordinaten erstellen. Darüber hinaus demonstriert der Aktions-Listener die Äquivalenz der angeklickten und gefundenen Schaltflächen.
Die erweiterte GridButtonPanel-Klasse veranschaulicht diesen Ansatz, bei dem jede Schaltfläche durch ihre Koordinaten innerhalb des Rasters eindeutig identifiziert wird. Beim Klicken auf eine beliebige Schaltfläche überprüft der Code die Konsistenz zwischen den erwarteten und tatsächlichen Schaltflächenreferenzen.
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(); } }); } }
Dieser erweiterte Ansatz vereinfacht den Prozess zum Erhalten von Elementkoordinaten innerhalb eines GridLayouts, wodurch komplexe Durchläufe überflüssig werden und die Effizienz verbessert wird .
Das obige ist der detaillierte Inhalt vonWie kann ich die X- und Y-Koordinaten eines Elements in einem GridLayout effizient bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!