我想像这样修改我的 JPanel:
public class Square extends JPanel {
private Checker fromChecker;
private int x;
private int y;
Square(int x, int y){
this.x = x;
this.y = y;
}
public int getX(){ return this.x; }
public int getY(){ return this.y; }
void setPossibleMoveChecker(Checker fromChecker){ this.fromChecker = fromChecker; }
Checker getPossibleMoveChecker(){ return this.fromChecker; }
}
我Square
在这里打电话:
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(Game.grid_size, Game.grid_size));
for(int x=1; x <= Game.grid_size; x ++){
for(int y=1; y <= Game.grid_size; y ++) {
Square square = new Square(x, y);
// grid colour
Color square_color = Game.grid1_colour;
if((x + y) % 2 == 0){
square_color = Game.grid2_colour;
}
square.setBackground(square_color);
square.addMouseListener(new Mouse());
panel.add(square);
}
}
不幸的是,结果如下:
好像我改变了这条线:
Square square = new Square(x, y);
至
JPanel square = new JPanel();
它完全像:
您覆盖了两个关键的 JComponent 方法getX()
和getY()
,这会干扰组件的放置,因为这是布局管理器用于放置组件的关键行为之一。
解决方案:重命名这些方法!
public class Square extends JPanel {
private Checker fromChecker;
private int column;
private int row;
Square(int column, int row){
this.column = column;
this.row = row;
}
public int getColumn(){
return this.column;
}
public int getRow(){
return this.row;
}
// ....
另一个支持组合而不是继承的原因,尤其是在处理具有许多潜在可重写方法的复杂类时。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句