我正在尝试制作游戏的GUI。我对Java非常陌生,尤其是GUI。下面的代码是一个片段,应该使用嵌套的面板来制作JFrame
,以进行组织。在我将按钮添加到按钮面板之前,它一直有效。它们最终出现在boardBckg
面板上。如果我设法将它们放置在正确的面板上,则JTextField
消失或占据整个屏幕。在过去的两天里,我一直在研究代码的这一部分,我真的可以使用GUI提示。
private void makeWindow()
{
boardPanel = new JPanel();
boardBckg = new JPanel();
menuPanel = new JPanel();
save = new JButton("Save");
save.setSize(Buttons);
load = new JButton("Load");
load.setSize(Buttons);
replay = new JButton ("Replay");
replay.setSize(Buttons);
words = new JTextField();
frame = new JFrame(title);
boardPanel.setSize(PANEL);
boardPanel.setMaximumSize(MAX);
boardPanel.setMinimumSize(MIN);
boardPanel.setLayout(new GridLayout(m,n));
boardBckg.setSize(1000, 1000);
boardBckg.setBackground(Color.cyan);
boardBckg.add(boardPanel, BorderLayout.CENTER);
frame.setSize(1500, 1000);
frame.setResizable(false);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BoxLayout vertical = new BoxLayout(menuPanel, BoxLayout.Y_AXIS);
menuPanel.setSize(500, 1000);
menuPanel.setBackground(Color.blue);
menuPanel.setLayout(vertical);
frame.add(boardBckg);
frame.add(menuPanel);
JPanel iGiveUp = new JPanel();
iGiveUp.setBackground(Color.black);
JPanel buttons = new JPanel();
buttons.setBackground(Color.darkGray);
buttons.add(save);
buttons.add(load);
buttons.add(replay);
menuPanel.add(iGiveUp);
menuPanel.add(buttons);
iGiveUp.add(words);
答案 0 :(得分:0)
boardBckg.add(boardPanel, BorderLayout.CENTER);
JPanel的默认布局是FlowLayout。将组件添加到面板中时,您不仅可以指定BorderLayout约束。
frame.add(boardBckg);
frame.add(menuPanel);
框架(内容窗格)的默认布局是BorderLayout。如果未指定约束,则将组件添加到BorderLayout.CENTER。问题是只能将一个组件添加到CENTER,因此您只能看到添加的最后一个组件。
frame.setVisible(true);
在包装好框架并使其可见之前,应将组件添加到框架中。因此,上面的语句应该是构造函数中的最后一条语句。
我不知道您想要的布局是什么,但是您需要从简单的内容开始,并利用框架的默认BorderLayout。
所以您的基本逻辑可能类似于:
JPanel menuPanel = new JPanel()
menuPanel.setLayout(new BoxLayout(menuPanel, BoxLayout.Y_AXIS));
menuPanel.add(...);
menuPanel.add(...);
JPanel center = new JPanel();
center.setLayout(...);
center.setBackground( Color.BLUE );
center.add(...);
frame.add(menuPanel, BorderLayout.LINE_START);
frame.add(center, BorderLayout.CENTER);
frame.pack();
frame.setVisible( true );
主要要点是按逻辑分解面板并将它们一次添加到框架中。因此,首先获取菜单及其添加到框架中的子组件是正确的位置。然后,您可以添加CENTER面板及其子组件。