ホームページ >Java >&#&チュートリアル >GridLayout 内の要素の X 座標と Y 座標を効率的に決定するにはどうすればよいですか?

GridLayout 内の要素の X 座標と Y 座標を効率的に決定するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-03 21:24:41269ブラウズ

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

GridLayout 内の要素の座標を効率的に決定する

GridLayout 内の特定の要素の x 座標と y 座標を識別することは、多くの場合、課題となることがあります。一般的なアプローチでは、ボタンの 2 次元配列を走査して関係を確立する必要がありますが、より効率的な方法が存在します。

この代替アプローチでは、含まれているコンポーネントの getComponentXIndex() メソッドと getComponentYIndex() メソッドを利用します。イベントのソースを参照することで、これらのメソッドは目的の座標を迅速に提供できます。

たとえば、次の Java コード スニペットを考えてみましょう。

JButton button = (JButton) ev.getSource();
int x = this.getContentPane().getComponentXIndex(button);
int y = this.getContentPane().getComponentYIndex(button);

このコードは、x と y を効果的に取得します。イベント ソースに基づくボタンのインデックス。

提供された Java Swing アプリケーションの例では、getGridButton() メソッドは、グリッド座標を使用してボタン参照を効率的に取得する上で重要な役割を果たします。さらに、アクション リスナーは、クリックされたボタンと見つかったボタンの同等性を示します。

拡張された GridButtonPanel クラスは、このアプローチを例示しており、各ボタンはグリッド内の座標によって一意に識別されます。いずれかのボタンをクリックすると、コードは予想されるボタン参照と実際のボタン参照の間の一貫性を検証します。

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();
            }
        });
    }
}

この強化されたアプローチにより、GridLayout 内の要素座標を取得するプロセスが簡素化され、複雑なトラバーサルの必要がなくなり、効率が向上します。 .

以上がGridLayout 内の要素の X 座標と Y 座標を効率的に決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。