我在java中学习GUI编程,并尝试修改现有程序,将包含按钮的垂直左侧面板添加到主框架中。
主要方法如下。目前,MainPanel类扩展了JPanel并包含程序的主要组件(基本游戏)。我想在游戏右侧创建一个新面板。
public static void main(String[] args) {
JFrame frame = new JFrame("Sokuban");
MainPanel panel = new MainPanel();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
我理解(我认为!)如何添加按钮 - 我没有被卡在那里。
我尝试过这样的事情:
frame.add(new MyPanel(), BorderLayout.NORTH);
(MyPanel()是一个扩展JPanel的新类)
window.setContentPane(panel, BoxLayout.X_AXIS);
(不会编译)
我坚持的是a)我是否应该尝试在我的JFrame中创建两个JPanel,然后使用BoxLayout(??)并排放置它们。或者,b)我是否应该在MainPanel中创建第二个JPanel,并以某种方式重新排列它?
另外,尽管阅读了文献,但我并不了解setContentPane()方法正在做什么。任何指针都会非常感激。
答案 0 :(得分:4)
默认情况下,JFrame已将JPanel作为ContentPane使用BorderLayout。 所以你可以这样做:
frame.add(new ButtonPanel(), BorderLayout.EAST);
frame.add(new MainPanel(), BorderLayout.CENTER);
JFrame setLayout()和add()方法实际上只是jFrame.getContentPane.setLayout()和jFrame.getContentPane.add()的快捷方式。 因此,在您的代码中,您在使用MainPanel替换之前设置了默认内容面板(JPanel)的布局,因此它没有任何效果。
setContentPane()方法允许您替换JFrame的内容面板,但很少需要。
答案 1 :(得分:2)
我想在游戏右侧创建一个新面板。
无需写下:
frame.setLayout(new BorderLayout());
frame.setContentPane(panel);
您只需使用以下代码段:
frame.getContentPane().add(panel1, BorderLayout.EAST);
frame.getContentPane().add(panel2, BorderLayout.WEST);
如果您希望右侧面板在框架的剩余区域内展开。
frame.getContentPane().add(panel2, BorderLayout.CENTER);