【问题标题】:How to add container to a frame?如何将容器添加到框架?
【发布时间】:2021-07-06 07:43:17
【问题描述】:

我正在尝试制作一个扫雷游戏,它为我们可以点击的笑脸图标和必须点击才能播放的按钮提供不同的空间。

public final class testFrame extends JFrame implements MouseListener, ActionListener {

private JFrame screen = null;
private JPanel composite = new JPanel();
public testFrame() {
    screen = new JFrame();
    screen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    screen.setVisible(true);
    screen.setResizable(true);
    composite.setLayout(new BorderLayout());
    //this button is not showing also
    JButton button = new JButton("Text goes here");
    composite.add(button);

    Container cp = screen.getContentPane();           // JFrame's content-pane
    cp.setLayout(new GridLayout(5, 5, 2, 2)); // in 10x10 GridLayout
    //codes to add buttons
 }

所以我在这里尝试将容器 cp 添加到屏幕上。但是开了 two screen

对不起,如果这看起来是小事,但我对这个 java GUI 真的很陌生,所以请帮助我。

编辑: 我删除了扩展 JFrame 并改用了屏幕。它有点工作,但我似乎无法将容器 cp 放到面板上。要求是我必须使用容器 cp。所以我无法改变。谢谢

public final class TestFrame implements MouseListener, ActionListener {
 private JFrame screen = null;
 private JPanel composite = new JPanel();
 private JPanel topPanel = new JPanel();
 public TestFrame() {
    screen = new JFrame("TestFrame");
    screen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    screen.setVisible(true);
    topPanel.setLayout(new BorderLayout());
    //composite.setLayout(new BorderLayout());

    //button in topPanel
    JButton button = new JButton("Text goes here");
    topPanel.add(button, BorderLayout.PAGE_START);
    //Content Pane
    Container cp = screen.getContentPane();// JFrame's content-pane
    cp.setLayout(new GridLayout(5, 5, 2, 2)); // in 10x10 GridLayout

    //composite.add(cp, BorderLayout.CENTER);
    screen.add(topPanel);
    // screen.add(composite);
 }

现在看起来像 this

【问题讨论】:

    标签: java swing user-interface jframe


    【解决方案1】:

    有几件事。

    1. 您正在扩展 JFrame 并将其用作同一类的属性,因此您可以使用 this 而不是 screen 或删除 extends JFrame,因为它是多余的且不需要
    2. 回答您的问题。 JFrame 包含一个名为ContentPane 的面板,该面板是您将面板添加到其中(您已经做了正确的布局)。所以解决办法是:
    cp.add(composite);
    

    【讨论】:

    • 嗨,我删除了 extends JFrame 并改用了 screen 变量。我为笑脸图标添加了一个新面板,所以目前我有 topPanel 和复合。 cp.add(composite) 不起作用。
    【解决方案2】:

    你有太多的 JFrame、扩展 JFrame 的 testFrame 类(并且应该重命名为 TestFrame 以符合 Java 命名约定)和 screen 变量。只使用一个。

    您可以并且应该嵌套 JPanel 以实现您想要的结果。例如,如果您想要一个网格以及一些控制按钮,请创建一个 JPanel,给它一个 BorderLayout,将您的网格 JPanel 放在 BorderLayout.CENTER 位置,并将一个 JPanel 与控制 JButtons 放在不同的位置,比如 BorderLayout.PAGE_START

    【讨论】:

    • 嗨,我删除了 extends JFrame 并改用了 screen 变量。我试图将 Container cp 放入复合材料中,但它不起作用。
    猜你喜欢
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 2021-07-24
    相关资源
    最近更新 更多