我正在使用Java创建国际象棋游戏,当我看到未按顺序将JButton添加到JPanel时,一切都很好,即(0,0)的位置与使用的位置不同System.out.Println谁知道我该怎么解决?
private void configurarCaselles() {
Insets marge = new Insets(0, 0, 0, 0);
for (int i = 0; i < t.getTaulerCaselles().length; i++) {
for (int j = 0; j < t.getTaulerCaselles()[0].length; j++) {
Casella_Grafic c = t.getFitxaGrafic(i, j);
c.setMargin(marge);
ImageIcon icon = new ImageIcon(new BufferedImage(64, 64, BufferedImage.TYPE_INT_ARGB));
c.setIcon(icon);
if ((i % 2 == 1 && j % 2 == 1) || (i % 2 == 0 && j % 2 == 0)) {
c.setBackground(Color.WHITE);
} else {
c.setBackground(Color.BLACK);
}
}
}
chessBoard.add(new JLabel(""));
for (int i = 0; i < 8; i++) {
chessBoard.add(new JLabel(COLS.substring(i, i + 1), SwingConstants.CENTER));
}
for (int j = 0; j < 8; j++) {
for (int i = 0; i < 8; i++) {
switch (i) {
case 0:
chessBoard.add(new JLabel("" + (9 - (j + 1)), SwingConstants.CENTER));
default:
chessBoard.add(t.getFitxaGrafic(i, j));
}
}
}
}
答案 0 :(得分:4)
显然,在将JButton
添加到chessBoard
时,要遍历行然后遍历列chessBoard.add(t.getFitxaGrafic(i, j));
的双数组:
i
当应该相反时(列然后是行),因此您只需要交换j
和chessBoard.add(t.getFitxaGrafic(j, i));
:
[DllImport("WinApiFunction")]
public static extern bool WinApiFunction(int arg1, int arg2, out IntPrt result)
public void Foo()
{
var result = IntPtr.Zero;
WinApiFunction(1, 2, out result);
Foo1(result);
Foo2(result);
Foo3(result);
//...
Foo10(result);
// ...
CloseHandle(result);
}
希望这会有所帮助。