【问题标题】:Learning GUIs - setContentPane() method学习 GUI - setContentPane() 方法
【发布时间】:2016-03-05 23:13:08
【问题描述】:

我正在学习 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() 方法在做什么。任何指针将不胜感激。

【问题讨论】:

  • 内容窗格是位于窗口内的组件。

标签: java swing user-interface


【解决方案1】:

默认情况下,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() 的快捷方式。 因此,在您的代码中,您正在设置默认内容面板(JPanel)的布局,就在用 MainPanel 替换它之前,所以它没有效果。

setContentPane() 方法允许您替换 JFrame 的内容面板,但很少需要。

【讨论】:

  • “但很少需要” 这真的取决于你在做什么......有时你必须或想要扩展一个组件来获得一些行为这样默认内容窗格将无法使用。但这是真的,很多时候我看到像class MyProgram extends JPanel { public static void main... 这样的东西,扩展一个组件以包含程序逻辑,这是一种糟糕的风格。
【解决方案2】:

我想在游戏右侧创建一个新面板。

这个不用写了:

frame.setLayout(new BorderLayout());
frame.setContentPane(panel);

你可以简单地使用这些代码sn-p:

frame.getContentPane().add(panel1, BorderLayout.EAST);
frame.getContentPane().add(panel2, BorderLayout.WEST);

如果您希望右侧面板遍布框架的剩余区域。

frame.getContentPane().add(panel2, BorderLayout.CENTER);

【讨论】:

    猜你喜欢
    • 2016-06-19
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    相关资源
    最近更新 更多