当前位置: 首页 > 知识库问答 >
问题:

将JPanel添加到JPanel时,第一个JPanel的大小变小

印成天
2023-03-14

我真的对此感到困惑。我在做“微旅行”游戏。这是手机游戏,但我是为电脑制作的。我有一个扩展JPanel的背景类,它只绘制一个从0开始的矩形,并且有屏幕的大小(我的游戏是全屏)。我有一个主菜单类,它也扩展了JPanel。我想在那里添加主菜单的所有内容。然后,我将所有内容添加到扩展JFrame的GameFrame类中。我有一个main类,它只是调用GameFrame类。下面是我的代码:背景类:

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

@SuppressWarnings("serial")

public class Background extends JPanel{

    int width, height;
    Color backgroundBlue;

    public Background(int width, int height){

        this.width = width;
        this.height = height;
        backgroundBlue = new Color(25, 159, 229);

    }

    @Override

    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setColor(backgroundBlue);
        g.fillRect(0, 0, this.width, this.height);
    }

}

MainMenu类:

import javax.swing.*;

@SuppressWarnings("serial")

public class MainMenu extends JPanel{

    Background background;

    public MainMenu(int WW, int WH){
        //WW = window width
        //WH = widow height
        this.setLocation(0, 0);
        this.setSize(WW, WH);
        background = new Background(WW, WH);
        this.add(background);
    }

}
import main_menu.MainMenu;
import main_menu.*;

import java.awt.Dimension;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;

import javax.swing.JFrame;

import java.awt.event.*;

@SuppressWarnings("serial")

public class GameFrame extends JFrame{

    private GraphicsDevice vc;
    private MainMenu mainMenu;
    //private Background background;

    public GameFrame(){

        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        mainMenu = new MainMenu((int)screenSize.getWidth(), (int) screenSize.getHeight());
        /*background = new Background((int)screenSize.getWidth(), (int) screenSize.getHeight());*/
        GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
        vc= e.getDefaultScreenDevice();
        this.setTitle("Mictrotrip");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBounds(0, 0, (int)screenSize.getWidth(), (int)screenSize.getHeight());
        this.add(mainMenu);
        //this.add(background);
        this.setLocationRelativeTo(null);
        this.setUndecorated(true);
        this.setResizable(false);
        vc.setFullScreenWindow(this);
        addKeyListener(new KeyListener(){

            public void keyPressed(KeyEvent e){

                if(e.getKeyCode() == KeyEvent.VK_ESCAPE){
                    System.exit(0);
                }

            }

            public void keyReleased(KeyEvent e){

            }

            public void keyTyped(KeyEvent e){

            }

        });
    }

}
public class Main {

    public static void main(String[] args) {

        new GameFrame();

    }

}

共有1个答案

谢承
2023-03-14

如果希望background填充main menu,那么MainMenu的问题就在这里--您让JPanel使用缺省的FlowLayouts,而FlowLayouts将不考虑组件大小(因此Jamal的解决方案不起作用),而是考虑其首选的大小。如果您希望background填充主菜单,那么给MainMenu一个BorderLayout,然后添加您的背景组件BorderLayout.Center:

public MainMenu(int WW, int WH){
    // WW = window width
    // WH = widow height
    // this.setLocation(0, 0);
    // this.setSize(WW, WH);

    setLayout(new BorderLayout());
    background = new Background(WW, WH);
    this.add(background, BorderLayout.CENTER);
}
 类似资料:
  • 我有一个JFrame(黑色)包含一个主JPanel(灰色),这个JPanel包含另外三个JPanels:North和South(红色)以及Center(蓝色)。中央的蓝色JPanel将在程序过程中动态添加大量的JPanel(绿色)。当中心JPanel已满时,我希望一个JScrollbar自动出现,向下滚动中心面板,并看到它包含的所有子(绿色)面板。谁能帮帮我吗?问题是滚动条根本没有出现,如果我在蓝

  • 问题内容: 我有一个gui,它的Panel包含一系列标签和TextField,并使用spring布局(这是mainPanel),而另一个Panel仅包含button(buttonPanel)。我正在尝试使我的mainPanel也具有垂直滚动条。我想实现我的GUI,以便在JFrame中有2个面板。mainPanel出现在框架的顶部,而buttonPanel出现在mainPanel的下方。 我的问题是

  • 我正在尝试将此 JPanel 添加到 JFrame 中,但我看不到他。当我创建新的 java 类并自己制作这个框架时,一切都很好。 来自JFrame表单的代码。 来自 JPanel 的代码: 来自Java类的代码。 我想不出区别在哪里。有人能帮我吗?

  • 我正在创建一个swing应用程序,并希望将JfreeChart添加到JPanel中。我创建了一个方法,在该方法中我创建了如下所示的图表: 创建了一个全局变量: 由于某种原因,当我点击按钮时,图表没有显示出来。

  • 我目前有一个主JFrame包含几个JPanels,每个面板中都有一些文本。创建JPanels的代码在一个单独的类中(它“实现”JPanels)。如何仅向单个面板添加JScrollPane? 我已经花了一些时间尝试这样做,但什么也没有发生。顺便说一下,我的JPanel使用GridLayout 上面的类是另一个面板类的实例变量,它是主面板“MenuHold”的实例变量。但使用“MenuHolder”的

  • 问题内容: 我是Java的新手,主要是CardLayout。我只想切换由JPanels表示的“窗口”。我在CardLayout的某处读过这份工作。但我的问题是,当到(这是CardLayout之一),它改变的内容几个像素顶端,从它的中心位置了。我在代码中跳过了它应该在的位置。 我有以下代码: 拜托,我搞砸了吗?谢谢。 问题答案: 由于您要在主JPanel中添加两个JPanel,因此这两个面板都需要容