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
# 1 楼答案
您有太多的JFrames、扩展JFrame的
testFrame
类(应该重新命名为TestFrame
以符合Java命名约定)和screen变量。只使用一个您可以而且应该嵌套JPanel以实现所需的结果。例如,如果您想要一个网格和一些控制按钮,创建一个JPanel,给它一个BorderLayout,将网格JPanel放在
BorderLayout.CENTER
位置,并将一个带有控制按钮的JPanel放在不同的位置,比如BorderLayout.PAGE_START
# 2 楼答案
有几件事
this
而不是screen
,或者删除extends JFrame
,因为它是冗余的,不需要ContentPane
的面板。该面板是您添加面板时使用的(您已经正确地进行了布局)。因此,解决方案是: