学习GUI - setContentPane()方法

时间:2016-03-05 23:13:09

标签: java swing user-interface

我在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()方法正在做什么。任何指针都会非常感激。

2 个答案:

答案 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);