如何在另一个JPanel中添加带有随机坐标的JPanel?

时间:2017-03-03 12:38:10

标签: java swing jpanel

我做了一个让位置随机化的游戏 (使用setBounds)小组(a),

但每当我将面板(a)添加到另一个面板(b)上时,它就会停留在面板的顶部(b)。

我需要将其放在另一个面板(b)上,因为该面板(b)位于Gridlayout上,以便正确使用Cardlayout

如果无法使用setBounds随机化。我对建议非常开放。

public class DisATrial extends JFrame{
private JLabel    score,time,title;
private JButton   gameButton;
private JPanel    panel ,gameUi //panel(a),panel(b)
,scoreBoard,countdown, gamePanel, gameText;

Container c;
CardLayout cl;
BufferedWriter writer,writer2;
Random r;
int xVal=0,yVal=0;
String[] comment = {"Over Here","Here bruh","Click me","Heyyyy","Sup Scrub","Too ez","Can't catch me"};
public DisATrial(){
    super("Click Me");
    c = getContentPane();
    cl = new CardLayout();
    c.setLayout(cl);
    GridBagConstraints gb= new GridBagConstraints();

    r=new Random();
    xVal=r.nextInt(750)+5; //random x coordinate
    yVal=r.nextInt(440)+30; //random y coordinate

    /*Master Panel-----------------------------------------------------------------------------------------------------------------------*/
    gamePanel=new JPanel(new GridBagLayout());
    /*coutdown-------------------------------------------------------------------------------------------------------------------------*/

    countdown=new JPanel();
    time=new JLabel("Time: ");
    time.setForeground(Color.WHITE);
    countdown.add(time,BorderLayout.CENTER);
    countdown.setBackground(Color.BLACK);
    gb.ipadx=132;
    gb.ipady=40;
    gb.gridx=0;
    gb.gridy=0;
    gb.anchor = GridBagConstraints.FIRST_LINE_START;
    gamePanel.add(countdown,gb);

    /*Game text-------------------------------------------------------------------------------------------------------------------------*/

    gameText=new JPanel();
    title=new JLabel("Mode : ");
    title.setForeground(Color.WHITE);
    gameText.add(title,BorderLayout.CENTER);
    gameText.setBackground(Color.LIGHT_GRAY);
    gb.ipadx=528;
    gb.ipady=40;
    gb.gridx=1;
    gb.gridy=0;
    gb.anchor = GridBagConstraints.PAGE_START;
    gamePanel.add(gameText,gb);

    /*Scoreboard-----------------------------------------------------------------------------------------------------------------------*/

    scoreBoard=new JPanel();
    score=new JLabel("Score: ");
    scoreBoard.add(score,BorderLayout.WEST);
    scoreBoard.setBackground(Color.decode("#1c1c1c"));
    gb.ipadx=132;
    gb.ipady=40;
    gb.gridx=2;
    gb.gridy=0;
    gb.anchor = GridBagConstraints.FIRST_LINE_END;
    gamePanel.add(scoreBoard,gb);


    /*Game Button -------------------------------------------------------------------------------------------------------------------------*/

    panel=new JPanel(); //panel(a)
    gameButton=new JButton(comment[r.nextInt(7)]);
    panel.setLocation(xVal,yVal);
    panel.setSize(120,40);
    panel.add(gameButton);
    panel.setBackground(Color.GRAY);

    /*Game UI -------------------------------------------------------------------------------------------------------------------------*/

    gameUi=new JPanel(); //panel(b)
    gameUi.add(panel);
    gameUi.setBackground(Color.DARK_GRAY);
    gb.ipadx=840;
    gb.ipady=520;
    gb.gridwidth=4;
    gb.gridx=0;
    gb.gridy=1;
    gamePanel.add(gameUi,gb);        

    /*Frame Properties---------------------------------------------------------------------------------------------------------------------*/

    c.add(gamePanel,"game");

    setVisible(true);
    setSize(960,640);
    cl.show(c,"game");
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

 public static void main(String[] args){
    DisATrial app= new DisATrial();
}

1 个答案:

答案 0 :(得分:-1)

您可以将null作为布局提供给gameUi,因为默认情况下它会获得一个FlowLayout,将您的按钮打包到左上角。