我不知道为什么我的网格覆盖我的按钮,我试图解决它,但我不能。谁能告诉我为什么?是因为,我把所有的东西都放在BorderLayout里了吗?谁能更多的玩按钮到右手边呢?
public game() {
make();
JPanel p = new JPanel();
frame.setLayout(new BorderLayout());
resetButton = new JButton("Play");
p.add(playButton, BorderLayout.EAST);
frame.add(p);
}
public void make(){
frame = new JFrame("Gamer");
frame.setTitle("Gamer");
JPanel m = new JPanel(new GridLayout(9,9));
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9; j++) {
grids[i][j] = new JButton();
m.add(grids[i][j]);
}
}
frame.add(m, BorderLayout.CENTER);
frame.setResizable(false);
frame.setSize(width, heigth);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}发布于 2014-12-18 02:45:47
尝试使用frame.add(p,BorderLayout.SOUTH)
下面是一个例子。
守则:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class game {
JFrame frame;
JButton grids[][] = new JButton[9][9];
public game() {
make();
JPanel p = new JPanel();
JButton resetButton = new JButton("reset");
JButton playButton = new JButton("Play");
p.add(playButton);
p.add(resetButton);
frame.add(p,BorderLayout.SOUTH);
frame.setVisible(true);
}
public void make() {
frame = new JFrame("Gamer");
frame.setTitle("Gamer");
JPanel m = new JPanel(new GridLayout(9, 9));
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
grids[i][j] = new JButton();
m.add(grids[i][j]);
}
}
frame.add(m, BorderLayout.CENTER);
frame.setResizable(false);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
game gameObj = new game();
}
}效果:

除此之外,类名的第一个字母应该大写。
发布于 2014-12-18 02:56:40
实际上,您正在将m (网格)和按钮面板添加到BorderLayout的CENTER位置。
这里
frame.add(m, BorderLayout.CENTER);和
p.add(playButton, BorderLayout.EAST);
frame.add(p); // adding to the CENTER positionBorderLayout中的默认位置是CENTER位置。通过简单地使用frame.add(p, BorderLayout.EAST);,你可以把按钮移到右边.

请注意,使用setResizable时会出现问题,它将更改框架的边框大小,更改框架内容的可用空间,始终在定义框架大小之前调用它,这应该用pack来完成。
如果可以的话,您确实希望避免修改框架的内容,因为这不仅会影响内容可能喜欢的空间,而且还需要您对容器进行revalidate和repaint。
更好的方法是创建框架,然后将其传递给game和make方法.
发布于 2014-12-18 02:38:43
您使用的是frame.add(p) --它可能不会将面板添加到框架的正确区域。试一试
frame.add(p, BorderLayout.SOUTH)或者别的什么?也就是说,不是CENTER,它将覆盖您的网格。
还请注意,面板的布局尚未设置,因此默认情况下它将是一个FlowLayout。
正如MadProgrammer所说,不需要设置框架的布局--特别是在添加网格之后!
最后,只添加到帧的getContentPane()是一个很好的实践。
https://stackoverflow.com/questions/27538317
复制相似问题