0

我需要将 JPanel 扩展类传递给主类。

到目前为止,这是我所拥有的:主要课程

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

public class main {

    private gamePanel gamepanel = new gamePanel();

    public JPanel createContentPane(){
        // We create a bottom JPanel to place everything on.
        JPanel totalGUI = new JPanel();

        //We set the Layout Manager to null so we can manually place
        // the Panels.
        totalGUI.setLayout(null);

        //Now we create a new panel and add it to the bottom JPanel.

        totalGUI.add(gamepanel);



        totalGUI.setOpaque(true);
        return totalGUI;
    }

    private static void createAndShowGUI(){
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("[=] There's a JPanel in here! [=]");

        //Create and set up the content pane.
        main demo = new main();
        frame.setContentPane(demo.createContentPane());

        //The other bits and pieces that make your program a bit more stable.
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(700,500);
        frame.setVisible(true);

    }
    public static void main(String[] args) {
        //Schedule a jog for the event-dispatching thread:
        //creating and showing this application's GUI.
        System.out.println(gamepanel);
        SwingUtilities.invokeLater(new Runnable() {
            public void run(){
                createAndShowGUI();
            }
        });
    }
}

游戏面板类

public class gamePanel extends JPanel implements Commons {

    private Dimension d;
    private ArrayList snowmens;
    private coreFunctions functions = new coreFunctions();
    private int snowmenX = 150;
    private int snowmenY = 5;
    private final String snowmenpix = "snowman.png";
    private JPanel background;

public gamePanel() {



    add(new JLabel("TEST"));
    setFocusable(true);


    setDoubleBuffered(true);
}


@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.BLUE);
    g.fillRect(0, 0, 700, 700);



}
}

我不知道为什么没有显示蓝色背景和标签......

编辑:

以下是更多详细信息:

好的,所以我正在尝试制作一个小 2D 游戏。为此,我需要在 gamePanel 类上创建一些雪人并通过主类显示它。要启动它,createContentPane 会创建一个背景面板,如果需要,它是根面板。createandshowgui 创建一个 JFrame。

gamepanel 类实际上是一个 JPanel,到目前为止有 1 个面板,即背景面板。现在,我只希望它有蓝色背景。

我试着这样说是因为我看到了一些例子,它们与我所拥有的非常相似,但由于某种原因,我无法让它工作......

谢谢你,阿拉

4

1 回答 1

4

您应该使用LayoutManager代替,setLayout(null);如果只添加一个组件,则也不需要它(除非添加其他组件,否则该组件将拉伸以填充)

LayoutManager有关s的教程,请参见此处:

如果您要做的只是拥有蓝色背景(您可以在其上添加组件),那么只需覆盖paintComponent()您的gamePanel并将背景涂成蓝色:

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLUE);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
    }

然后你可以添加你的JLabel,就好像它是一个普通的面板一样,因为背景现在被涂成蓝色,而不是由/作为组件设置。

如果你有图片看看g.drawImage(Image image,int x,int y,ImageObserver iO)

编辑

拨打电话至:

setLayout(null);

它会起作用

于 2012-08-20T20:39:46.023 回答