積みました!私はJavaに比較的慣れていないので、Webを検索して問題を解決できませんでしたが、今こそあなたの助けを求める時です。
JButtonの配列を2回クリックした後、アクションリスナー(actionPerformed)を変更する方法がわかりません...(実際にはわかりません)。以下のコードを見つけて、私を導くことができます。
これが現在のプログラムの実行方法です。
グリッドを最初にクリックすると、クリックしたボタンの境界線が「青」に変わり、別のボタンの境界線が「赤」に変わります。次のクリックで同じアクションが実行されます。
私が必要とするのは、「赤」の縁取りボタンがクリックされたときのアクションを変更することです.ボタンの色を「赤」から「青」ボタンに変更するとしましょう.(x 3 ボタン)。
最終結果を実行する方法についてのロジックは自分でできると思いますが、問題は、赤い枠で囲まれたボタンがクリックされたときのアクションを変更する方法です。
あなたの助けは大歓迎です!
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class ChangeGrid
{
private JButton[][] bu1 = new JButton[10][10];
public ChangeGrid(JFrame frame)
{
super();
JPanel pCenter = new JPanel();
JPanel pTop = new JPanel();
frame.add(pCenter, BorderLayout.CENTER);
frame.add(pTop, BorderLayout.NORTH);
JPanel Grid10x10 = new JPanel(new GridLayout(10,10));
pCenter.add(Grid10x10);
for(int c = 0; c< 10; c++)
{
for (int r = 0; r< 10; r++)
{
bu1[c][r] = new JButton("X");
Grid10x10.add(bu1[c][r]);
final int i = c;
final int j = r;
bu1[i][j].addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
int f = (3-1);
bu1[i][j].setBorder(BorderFactory.createLineBorder(Color.BLUE, 2));
if ((j+f)<=9)
{
bu1[i][j+f].setBorder(BorderFactory.createLineBorder(Color.RED, 2));
}
else
{
JOptionPane.showMessageDialog(null,"move your 1st click more to the center");
}
}
});
}
}
}
}
import javax.swing.JFrame;
public class GUIFrame extends JFrame
{
public GUIFrame()
{
super("Grid 10 x 10");
this.setSize(1350, 700);
this.setVisible(true);
this.setResizable(true);
this.setDefaultCloseOperation(GUIFrame.EXIT_ON_CLOSE);
}
}
import javax.swing.JFrame;
public class Main
{
public static void main(String args[])
{
JFrame frame = new GUIFrame();
ChangeGrid pC = new ChangeGrid(frame);
frame.pack();
}
}