为什么JPanel没有在JFrame中显示?

时间:2013-12-02 20:03:39

标签: java swing

java新手。我在两个单独的java文件中有两个类。

Grid.java的代码是:

package grid;

import java.awt.*;
import javax.swing.*;

public class Grid {


    public static void main(String[] args){

        JFrame f = new JFrame("The title");

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(500,400);
        f.setResizable(false);
        f.setVisible(true);


        GridSupport g = new GridSupport();
        f.add(g); //getting error when i don't extends GridSupport to JPanel

    }

}

GridSuppoer.java的代码是:

package grid;

import java.awt.*;

import javax.swing.*;


public class GridSupport extends JPanel{

    private JPanel p;
    private JButton b;

    public GridSupport(){



        p = new JPanel();
        p.setBackground(Color.GREEN);
        p.setSize(100, 100);

        b = new JButton("Click me!");
        p.add(b);

    }

}

我想知道1)为什么没有播放JPanel? 2)如果我将两个类放在同一个文件中,我不需要将GridSupport类扩展到JPanel,但是当我将它们放在两个单独的文件中时,我需要扩展JPanel,否则它会显示错误。为什么?

2 个答案:

答案 0 :(得分:2)

JFrame f = new JFrame("The title");
GridSupport g = new GridSupport();
f.add(g)
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500,400);
f.setResizable(false);
f.setVisible(true);

在设置框架可见之前添加GridSupprt。通常,您应该确保在使其可见之前将所有组件添加到框架

GridSupport本身就是一个JPanel。因此,当您在GridSupport中创建一个新的JPanel并只添加该Panel中的所有内容时,您仍然需要将内部面板添加到GridSupport

public class GridSupport extends JPanel{

    private JButton b;

    public GridSupport(){

        setBackground(Color.GREEN);
        setSize(100, 100);

        b = new JButton("Click me!");
        add(b);

    }
}

答案 1 :(得分:1)

因为GridSupport扩展了JPanel,所以不需要在其中创建JPanel(因为它是JPanel本身,具有一些额外的功能。 你的GridSupport类看起来应该是这样的:

package grid;

import java.awt.*;

import javax.swing.*;


public class GridSupport extends JPanel{

    private JButton b;

    public GridSupport(){
        this.setBackground(Color.GREEN);
        this.setSize(100, 100);

        b = new JButton("Click me!");
        this.add(b);
    }

}