JButtons 大小不正确
JButtons incorrect size
我想使用 JFrame 绘制一个 13x13 的瓷砖板。
这是代码:
public static void drawBoard() {
final int TILE_SIZE = 60;
final int TILES = 13;
JFrame jFrame = new JFrame("Board");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(TILE_SIZE * TILES + 17, TILE_SIZE * TILES);
jFrame.setResizable(false);
JButton button = null;
ImageIcon icon = null;
for (int y = 0; y < TILES; y++) {
for (int x = 0; x < TILES; x++) {
button = new JButton(alphabet[x] + "" + alphabet[y]);
button.setName(alphabet[x] + "" + alphabet[y]);
button.setBounds(TILE_SIZE * y, TILE_SIZE * x, TILE_SIZE, TILE_SIZE);
button.addActionListener(new Clicked());
button.setBackground(Color.WHITE);
jFrame.getContentPane().add(button);
}
}
jFrame.setVisible(true);
}//end drawBoard
现在,当我 运行 代码时,它显示了一个按钮网格,但右下角的按钮与框架的大小相同。
您真的应该研究处理组件大小的布局,而不是在组件本身上设置它(请参阅:MIG 布局),但这应该让您如愿以偿。
public static void drawBoard(){
final int TILE_SIZE = 60;
final int TILES = 13;
JFrame jFrame = new JFrame("Board");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(TILE_SIZE * TILES + 17, TILE_SIZE * TILES);
jFrame.getContentPane().setLayout(new GridLayout(TILES, TILES));
jFrame.setResizable(false);
JButton button = null;
Dimension dim = new Dimension(TILE_SIZE, TILE_SIZE);
for (int y = 0; y < TILES; y++) {
for (int x = 0; x < TILES; x++) {
button = new JButton(alphabet[x] + "" + alphabet[y]);
button.setSize(dim);
button.addActionListener(new Clicked());
button.setBackground(Color.WHITE);
jFrame.getContentPane().add(button);
}
}
jFrame.setVisible(true);
}
but the one at the bottom right corner is the same size of the frame.
Swing 旨在与布局管理器一起使用。布局管理器会根据布局管理器的规则来决定一个组件的size/location。
对于 JFrame,默认的布局管理器是 BorderLayout
。当您在不使用 "constraint" 的情况下将组件添加到 BorderLayout
时,该组件将添加到 CENTER
。但是,只能将一个组件添加到 CENTER
。因此只有最后添加的组件才会由布局管理器给出 size/location。在这种情况下,规则是使按钮的大小与框架中可用的 space 相同。
如果你想要一个网格,那么你应该使用 GridLayout
。然后布局管理器将使每个按钮的大小相同。
阅读 Layout Managers 上的 Swing 教程部分了解更多信息。 BorderLayout
和 GridLayout
.
都有工作示例
我想使用 JFrame 绘制一个 13x13 的瓷砖板。 这是代码:
public static void drawBoard() {
final int TILE_SIZE = 60;
final int TILES = 13;
JFrame jFrame = new JFrame("Board");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(TILE_SIZE * TILES + 17, TILE_SIZE * TILES);
jFrame.setResizable(false);
JButton button = null;
ImageIcon icon = null;
for (int y = 0; y < TILES; y++) {
for (int x = 0; x < TILES; x++) {
button = new JButton(alphabet[x] + "" + alphabet[y]);
button.setName(alphabet[x] + "" + alphabet[y]);
button.setBounds(TILE_SIZE * y, TILE_SIZE * x, TILE_SIZE, TILE_SIZE);
button.addActionListener(new Clicked());
button.setBackground(Color.WHITE);
jFrame.getContentPane().add(button);
}
}
jFrame.setVisible(true);
}//end drawBoard
现在,当我 运行 代码时,它显示了一个按钮网格,但右下角的按钮与框架的大小相同。
您真的应该研究处理组件大小的布局,而不是在组件本身上设置它(请参阅:MIG 布局),但这应该让您如愿以偿。
public static void drawBoard(){
final int TILE_SIZE = 60;
final int TILES = 13;
JFrame jFrame = new JFrame("Board");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(TILE_SIZE * TILES + 17, TILE_SIZE * TILES);
jFrame.getContentPane().setLayout(new GridLayout(TILES, TILES));
jFrame.setResizable(false);
JButton button = null;
Dimension dim = new Dimension(TILE_SIZE, TILE_SIZE);
for (int y = 0; y < TILES; y++) {
for (int x = 0; x < TILES; x++) {
button = new JButton(alphabet[x] + "" + alphabet[y]);
button.setSize(dim);
button.addActionListener(new Clicked());
button.setBackground(Color.WHITE);
jFrame.getContentPane().add(button);
}
}
jFrame.setVisible(true);
}
but the one at the bottom right corner is the same size of the frame.
Swing 旨在与布局管理器一起使用。布局管理器会根据布局管理器的规则来决定一个组件的size/location。
对于 JFrame,默认的布局管理器是 BorderLayout
。当您在不使用 "constraint" 的情况下将组件添加到 BorderLayout
时,该组件将添加到 CENTER
。但是,只能将一个组件添加到 CENTER
。因此只有最后添加的组件才会由布局管理器给出 size/location。在这种情况下,规则是使按钮的大小与框架中可用的 space 相同。
如果你想要一个网格,那么你应该使用 GridLayout
。然后布局管理器将使每个按钮的大小相同。
阅读 Layout Managers 上的 Swing 教程部分了解更多信息。 BorderLayout
和 GridLayout
.