我试图制作一个17乘17的GridLayout电路板,但是当我运行代码时,我生成的电路板搞砸了,看起来像这样而不是17×17按键板:
所以我的问题是为什么电路板显示这样的怪异,如何让它显示我想要的17×17按钮板?
这是我正在使用的代码:
public class TheJFrame {
public static final char[][] board = new char[17][17];
public static class TheJFramez {
JFrame boardz = new JFrame("Game of Life");
JPanel panel = new JPanel();
public TheJFramez(){
int r = 0,c;
boardz.setLayout(new GridLayout(board.length,board[r].length,1,1));
for(r=0;r<board.length;r++){
for(c = 0;c<board[r].length;c++){
JButton tats = new JButton(" " + board[r][c] + " ");
panel.add(tats);
}
}
boardz.add(panel);
boardz.setVisible(true);
boardz.setSize(1200, 700);
boardz.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
public static void main(String[] args) {
new TheJFramez();
}
}
答案 0 :(得分:2)
在此代码中,您已设置&#39; boardz&#39;在将按钮添加到“面板”时,将GridLayout添加到GridLayout没有指定谁的布局,它采用默认布局,当你将面板添加到&#39; boardz&#39;时,面板将以网格布局排列,而面板的组件则为&#39; panel& #39;仍然是默认布局。
因此,您希望将JButton添加到boardz,并且不使用面板。
这是正确的代码: -
import java.awt.*;
import javax.swing.*;
public class TheJFrame {
public static final char[][] board = new char[17][17];
public static class TheJFramez {
JFrame boardz = new JFrame("Game of Life");
JPanel panel = new JPanel();
public TheJFramez(){
int r = 0,c;
boardz.setLayout(new GridLayout(board.length,board[r].length));
for(r=0;r<17;r++){
for(c = 0;c<17;c++){
JButton tats = new JButton(" " + board[r][c] + " ");
boardz.add(tats);
System.out.print(board[r][c]);
}
System.out.println();
}
boardz.setVisible(true);
boardz.setSize(1200, 700);
boardz.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
public static void main(String[] args) {
new TheJFramez();
}
}
答案 1 :(得分:1)
shubham你是对的,但框架采用默认布局,即flowlayout。因此它们以线性方式排列。所以你可以将布局设置为gridlayout。