我为我的学校创建了一个应该包含n*n
按钮的程序。
这些按钮应该是矩阵布局,有n行和n列。
所以我创建了面板,并创建了一个名为Position
的类,它扩展了JButton
s - 我要添加到面板的按钮。
我在面板中添加了布局:
this.setLayout(new GridLayout(n,n));
然后我创建了n * n个位置按钮并将它们添加到面板中。
问题是,所有按钮都添加到同一个地方(屏幕的左上角) - 即使我可以在他们应该的位置点击它们! (参见屏幕截图,其中n为4)
即使按钮不在,我也可以点击灰色区域(空白):
] 1
面板构造函数:
public GamePanel(int n) {
super();
this.n = n;
positions = new Position[n][n];
this.setLayout(new GridLayout(n,n));
currX = new Random().nextInt(n);
currY = new Random().nextInt(n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
Position p = new Position(i, j);
this.add(p);
positions[i][j] = p;
}
}
Position
类的构造函数:
public class Position extends JButton {
private int x;
private int y;
private boolean visited = false;
public Position(int x, int y) {
super("");
this.x = x;
this.y = y;
this.setPreferredSize(new Dimension(50,50));
}
框架:
public class Game extends JFrame {
private GamePanel gamePanel;
public Game(int n){
super();
gamePanel = new GamePanel(n);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new BorderLayout());
this.add(gamePanel,BorderLayout.CENTER);
this.add(new JTextField(),BorderLayout.NORTH);
this.pack();
this.setVisible(true);
}
}
哪里可能是我的错?
答案 0 :(得分:2)
所以,在把你不完整的例子放回去后,我得到了......
然后我注意到instance Enum Integer where
succ x = x + 1
pred x = x - 1
toEnum (I# n) = smallInteger n
fromEnum n = I# (integerToInt n)
{-# INLINE enumFrom #-}
{-# INLINE enumFromThen #-}
{-# INLINE enumFromTo #-}
{-# INLINE enumFromThenTo #-}
enumFrom x = enumDeltaInteger x 1
enumFromThen x y = enumDeltaInteger x (y-x)
enumFromTo x lim = enumDeltaToInteger x 1 lim
enumFromThenTo x y lim = enumDeltaToInteger x (y-x) lim
按钮中的x
/ y
属性,这使我可能包含Position
和getX
方法,像... ...
getY
生成的......
所以答案是,包含一个完整的runnable example来证明你的问题。这不是代码转储,而是您正在做的事情的一个示例,它突出了您遇到的问题。这将减少混淆和更好的响应
并且不要覆盖public class Position extends JButton {
private int x;
private int y;
private boolean visited = false;
public Position(int x, int y) {
super("");
this.x = x;
this.y = y;
this.setPreferredSize(new Dimension(50, 50));
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
的{{1}}和getX
,而是将方法更改为getY
和JButton