为什么我的孩子-JPanels在父JPanel中被移位或放错了位置?

时间:2013-07-08 18:21:15

标签: java swing jpanel layout-manager grid-layout

我有一个JFrame,其中一个主GamePanel

import javax.swing.*;

public class GameFrame extends JFrame {

    public static void main(String[] args) {

        JFrame gameFrame = new JFrame( "Ultimate Tic Tac Toe");

        gameFrame.setResizable(false);
        gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gameFrame.add( new GamePanel() );
        gameFrame.pack();
        gameFrame.setVisible(true);

    }
}

GamePanel有BorderLayout我有setPreferredSize(new Dimension(800,800))

公共类GamePanel扩展了JPanel实现的ActionListener {

private BoardPanel boardPanel; //the main game, comprised of minigames
private static TrackingPanel trackingPanel; //keeps track of score, turn, and stuff
private ArrayList<MiniGame> miniGames;

public GamePanel() {

    super( new BorderLayout());
    setFocusable(true);
    setPreferredSize(new Dimension(800,800));

    //create panel that will hold the 9 mini games
    boardPanel = new BoardPanel(this); 

    //add actionListeners to each button
    miniGames = boardPanel.getMiniGames();
    for (MiniGame mini : miniGames) {
        for (SquareButton button : mini.getSquares())
            button.addActionListener(this);
    }

    add( trackingPanel, BorderLayout.NORTH);
    add( boardPanel, BorderLayout.CENTER);
}//end constructor

在CENTER中我的BoardPanelGridLayout(3,3),因此BoardPanel有9个孩子MiniGame JPanels HERE&#39;我的问题 :添加如下的迷你游戏工作正常,但出于某种原因,他们被推到并在父母外面展示{ {1}}和窗口。理想情况下,我想在不改变布局的情况下这样做,因为我知道他们以前工作过。这是BoardPanel的代码。

BoardPanel

我知道面板都被添加和显示(我通过更改边框厚度来检查。另外,增加空边框大小会显示更多的MiniGame面板)。所以,而不是像网格一样显示:

import java.awt.*;
import java.util.ArrayList;
import javax.swing.JPanel;

public class BoardPanel extends JPanel {

private ArrayList<MiniGame> miniGames;

public BoardPanel(GamePanel gp) {
     super(new GridLayout(3,3));
             setBorder(BorderFactory.createEmptyBorder(200,200,200,200)); 

     miniGames = new ArrayList<MiniGame>(9);
     for(int i = 1; i<=9; i++)
         miniGames.add(new MiniGame(gp, i));

     for(MiniGame mini : miniGames)
         add(mini);
}
他们对角线向下显示:

 1 2 3 
 4 5 6
 7 8 9

其他人在父母小组之外。

这是MiniGame构造函数,如果有帮助:

 1
   2
     3
      ...

全部谢谢!

2 个答案:

答案 0 :(得分:1)

向后工作我意识到这是我称之为getX()和getY()的两个函数。我想那些是JPanels的默认函数,我压倒了它们。

答案 1 :(得分:0)

“MiniGame构造函数”显示您调用{add(squares [i]);},但是您没有显示MiniGame中的添加功能。由于您没有显示其所有代码,因此我们不知道它的扩展内容。如果它本身就是一个UI类,那么你的问题可能是布局管理器在该容器中处于活动状态,无论它是什么。