首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的子JPanels会被移动或者放在父JPanel中?

为什么我的子JPanels会被移动或者放在父JPanel中?
EN

Stack Overflow用户
提问于 2013-07-08 18:21:15
回答 2查看 129关注 0票数 1

我有一个JFrame,有一个主GamePanel

代码语言:javascript
复制
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 {

代码语言:javascript
复制
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

中心是my BoardPanel,它有一个GridLayout(3,3),所以BoardPanel有9个子MiniGame JPanels这里是我的问题:像下面这样添加MiniGames很好,但是由于某种原因,它们被推送到父BoardPanel和窗口之外显示。理想情况下,我希望在不改变布局的情况下这样做,因为我知道它们以前是工作过的。这是BoardPanel的代码。

代码语言:javascript
复制
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);
}

我知道所有的面板都是添加和显示(我检查通过改变他们的边框厚度。此外,增加空边框大小会显示更多的MiniGame面板)。因此,与其像网格一样显示:

代码语言:javascript
复制
 1 2 3 
 4 5 6
 7 8 9

它们呈对角线向下显示:

代码语言:javascript
复制
 1
   2
     3
      ...

其馀部分在父面板之外。

如果这有帮助的话,下面是MiniGame构造函数:

代码语言:javascript
复制
public MiniGame(GamePanel gp, int num) {

    super( new GridLayout(3,3));
    setFocusable(true);

    trackingPanel = gp.getTrackingPanel();
    panelNum = num;

    if(panelNum==1)
        setBorder(BorderFactory.createMatteBorder(0,0,2,2,Color.BLACK));
    else if(panelNum==2)
        setBorder(BorderFactory.createMatteBorder(0,2,2,2,Color.BLACK));
    else if(panelNum==3)
        setBorder(BorderFactory.createMatteBorder(0,2,2,0,Color.BLACK));
    else if(panelNum==4)
        setBorder(BorderFactory.createMatteBorder(2,0,2,2,Color.BLACK));
    else if(panelNum==5)
        setBorder(BorderFactory.createMatteBorder(2,2,2,2,Color.BLACK));
    else if(panelNum==6)
        setBorder(BorderFactory.createMatteBorder(2,2,2,0,Color.BLACK));
    else if(panelNum==7)
        setBorder(BorderFactory.createMatteBorder(2,0,0,2,Color.BLACK));
    else if(panelNum==8)
        setBorder(BorderFactory.createMatteBorder(2,2,0,2,Color.BLACK));
    else
        setBorder(BorderFactory.createMatteBorder(2,2,0,0,Color.BLACK));

    squares = new SquareButton[9];

    //create squares and add squares to mini game
    for ( int i = 0; i < squares.length; i++ ) {
        squares[i] = new SquareButton(i);
        add(squares[i]);
    }
     }

谢谢大家!

EN

回答 2

Stack Overflow用户

发布于 2013-07-08 19:08:11

回溯工作时,我意识到这是我调用了getX()和getY()的两个函数。我猜这是JPanels的默认函数,我正在重写它们。

票数 1
EN

Stack Overflow用户

发布于 2013-07-08 19:12:46

"MiniGame构造函数“显示调用{ add (squaresi);},但没有显示add在MiniGame中的作用。因为您没有显示它的所有代码,所以我们不知道它扩展了什么。如果它本身是一个UI类,那么您的问题可能是在该容器中活动的布局管理器,不管它是什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17533412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档