Heim > Java > javaLernprogramm > Wie kann ich die X- und Y-Koordinaten eines Elements in einem GridLayout effizient bestimmen?

Wie kann ich die X- und Y-Koordinaten eines Elements in einem GridLayout effizient bestimmen?

Linda Hamilton
Freigeben: 2025-01-03 21:24:41
Original
272 Leute haben es durchsucht

How Can I Efficiently Determine the X and Y Coordinates of an Element in a GridLayout?

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);
Nach dem Login kopieren

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();
            }
        });
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage