JPanel GridLayout使所有按钮位于同一位置

时间:2016-01-31 12:06:22

标签: java swing layout jpanel jbutton

我为我的学校创建了一个应该包含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);
}

}

哪里可能是我的错?

1 个答案:

答案 0 :(得分:2)

所以,在把你不完整的例子放回去后,我得到了......

Good output

然后我注意到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属性,这使我可能包含PositiongetX方法,像... ...

getY

生成的......

Bad ouptut

所以答案是,包含一个完整的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,而是将方法更改为getYJButton