Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Menentukan Koordinat X dan Y Elemen dalam GridLayout dengan Cekap?
Menentukan Koordinat Elemen Dalam GridLayout Dengan Cekap
Mengenal pasti koordinat x dan y bagi elemen tertentu dalam GridLayout selalunya boleh menimbulkan cabaran. Walaupun pendekatan biasa melibatkan melintasi tatasusunan dwidimensi butang untuk mewujudkan hubungannya, kaedah yang lebih cekap wujud.
Pendekatan alternatif ini memanfaatkan kaedah getComponentXIndex() dan getComponentYIndex() bagi komponen yang mengandungi. Dengan merujuk sumber peristiwa, kaedah ini boleh memberikan koordinat yang dikehendaki dengan pantas.
Sebagai contoh, pertimbangkan coretan kod Java berikut:
JButton button = (JButton) ev.getSource(); int x = this.getContentPane().getComponentXIndex(button); int y = this.getContentPane().getComponentYIndex(button);
Kod ini mengambil semula x dan y dengan berkesan indeks butang berdasarkan sumber acaranya.
Dalam contoh Aplikasi Java Swing yang disediakan, kaedah getGridButton() memainkan peranan penting dalam mendapatkan rujukan butang dengan cekap menggunakan koordinat grid. Tambahan pula, pendengar tindakan menunjukkan kesetaraan butang yang diklik dan ditemui.
Kelas GridButtonPanel yang dipertingkatkan mencontohi pendekatan ini, di mana setiap butang dikenal pasti secara unik oleh koordinatnya dalam grid. Apabila mengklik mana-mana butang, kod itu mengesahkan ketekalan antara rujukan butang yang dijangka dan sebenar.
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(); } }); } }
Pendekatan yang dipertingkatkan ini memudahkan proses mendapatkan koordinat elemen dalam GridLayout, menghapuskan keperluan untuk traversal yang kompleks dan meningkatkan kecekapan .
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Koordinat X dan Y Elemen dalam GridLayout dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!