有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将容器添加到框架中?

我正在尝试制作一个扫雷艇,它有一个不同的空间来放置我们可以点击的笑脸图标和我们必须点击才能播放的按钮

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新手,所以请帮助我

编辑: 我去掉了框架,改用了屏幕。它有点工作,但我似乎不能把容器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


共 (2) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    有几件事

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