我做了一个让位置随机化的游戏
(使用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();
}
答案 0 :(得分:-1)
您可以将null
作为布局提供给gameUi,因为默认情况下它会获得一个FlowLayout,将您的按钮打包到左上角。