Java で GridLayout を操作する場合、x と Y のインデックスを決定する必要がある場合があります。グリッド内の特定のボタンの y インデックス。従来の方法では、ボタンの 2 次元配列を反復処理して探しているボタンを見つけるネストされたループが必要です。
<br> @Override<br> public void actionPerformed(ActionEvent ae) {</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">JButton bx = (JButton) ae.getSource(); for (int i = 0; i < 5; i++) for (int j = 0; j < 5; j++) if (b[i][j] == bx) { bx.setBackground(Color.RED); }
}
このアプローチは退屈でエラーが発生しやすい可能性があります。幸いなことに、ボタンの座標を取得するより効率的な方法があります。
GridButtonPanel クラスの紹介
次の Java コードは、簡略化されたソリューションを示しています。
<br>インポートjava.awt.EventQueue;<br>import java.awt.GridLayout;<br>import java.awt.event.ActionEvent;<br>import java.awt.event.ActionListener;<br>import java.util.ArrayList; <br>import java.util.List;<br>import javax.swing.JButton;<br>import javax.swing.JFrame;<br>import javax.swing.JPanel;</p> <p>/**</p> <ul><li>@http://stackoverflow.com/questions/7702697<br>を参照してください*/</li></ul> <p>パブリック クラス GridButtonPanel {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">private static final int N = 5; private final List<JButton> list = new ArrayList<JButton>(); 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(); } }); }
}
このコード内:
1. getGridButton() メソッド:
このメソッドを使用すると、x 座標と y 座標に基づいてグリッドからボタンを取得できます。リスト内のインデックスを決定するには、行数 (N) に指定された行 (r) を乗算し、指定された列 (c) を追加します。
2。アクション リスナー:
ボタンがクリックされると、アクション リスナーがトリガーされ、getGridButton() メソッドを呼び出して、クリックされたボタンを取得します。次に、クリックされたボタン (b) の参照と取得されたボタン (gb) を比較して、両方が同じボタンを表していることを確認します。
3. display() Method:
このメソッドは、グラフィカル ユーザー インターフェイス (GUI) を作成し、それを表示します。
このプログラムを実行すると、GUI には x を含むボタンを含むグリッドが表示されます。そしてy座標。いずれかのボタンをクリックすると、コンソールはその座標を出力し、ボタンの ID を確認します。
例:
"r2,c3" というラベルの付いたボタンをクリックすると、 "、コンソール出力は次のようになります:
r2,c3 true true
これは、取得されたボタン (gb) はクリックされたボタン (b) と同一であり、操作が成功したことを示しています。
このアプローチを使用すると、複雑なネストされたループ プロセスを回避し、ボタンの x インデックスと y インデックスに効率的にアクセスできます。 GridLayout.
以上がJava GridLayout のボタンの X インデックスと Y インデックスを効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。