Java 如何将一个JPanel添加到另一个具有图形的JPanel上?

Java 如何将一个JPanel添加到另一个具有图形的JPanel上?,java,swing,graphics,jpanel,Java,Swing,Graphics,Jpanel,基本上,我试图做的是使用paintComponent()方法将一个JPanel添加到另一个已绘制图形的JPanel上。但是我试图添加的JPanel没有显示出来,因为它被JPanel上的新图形所覆盖 我怎样才能使当我将JPanel添加到一个带有图形的面板中时,它将在前面显示JPanel,而不是被图形覆盖 感谢您的回答!:) 如果你需要密码,告诉我,我很乐意把它放在这里 好的,代码如下: 这是我添加到游戏JPanel中的JPanel的代码 自定义绘制是通过重写paintComponent(…)

基本上,我试图做的是使用paintComponent()方法将一个JPanel添加到另一个已绘制图形的JPanel上。但是我试图添加的JPanel没有显示出来,因为它被JPanel上的新图形所覆盖

我怎样才能使当我将JPanel添加到一个带有图形的面板中时,它将在前面显示JPanel,而不是被图形覆盖

感谢您的回答!:)

如果你需要密码,告诉我,我很乐意把它放在这里

好的,代码如下:

这是我添加到游戏JPanel中的JPanel的代码


自定义绘制是通过重写paintComponent(…)方法完成的。我猜您正在重写paint()方法

请阅读上的Swing教程中的本节。因为覆盖了错误的方法,所以首先绘制子对象,然后在顶部进行自定义绘制


如果您需要更多的帮助,而不是发布演示问题的帖子。

请提醒:java.awt和javax.swing不能很好地混合使用。当你在一个面板上画东西并试图添加一个JPanel时,你肯定会在某个地方遇到问题。一个更好的解决方案是有两个不同的JPanel,一个用于图形,一个用于库存

大概是这样的:

JPanel mainPanel = new JPanel(); //will hold BOTH panels
JPanel gamePanel = new Game(myCharacter); //declare game panel
JPanel inventoryPanel = new Inventory(); //declare inventory panel

//set up some layout
mainPanel.setLayout(new GridLayout(2, 1));

//add the graphics panel, then add the inventory
mainPanel.add(gamePanel);
mainPanel.add(inventoryPanel);

这将防止您的swing和awt组件混合,并为您节省大量麻烦。

应始终张贴SSCCE,这样我们就不必猜测您可能在做什么或不在做什么。另外,在创建SSCCE时,很多时候你会发现问题所在,因此你甚至不需要发布问题。我认为你不应该处理传递到paintComponent方法中的图形对象。我不确定这会有什么影响,但看起来不太好。OTOH,是的,在使用完自己创建的图形对象后,一定要处理它,但不要处理传递到paint或paintComponent中的图形对象,因为您没有创建它。@Hovercraft按您的方式工作!我拿出了g.dispose();它完全起作用了!我只是把它放在那里,因为我是按照一个教程所说的去做的。但是谢谢!作为旁白,调用某物
getAnything(…)
并使其
void
并实际设置某物是一个糟糕的命名决策。我建议将其命名为
initInventoryScreen()
,这是一种良好的做法。是的,如果您从BuffereImage创建图形对象,那么本教程是正确的。否则,您可能会耗尽系统资源。但是传递到paintComponent方法中的图形对象是由图形子系统创建的(我认为),可以用来绘制组件的边框和子对象。由于您添加的JPanel是子组件,因此如果您处理图形对象,可能不会绘制它。对于任何一位专家,请纠正我在这里做出的任何错误假设,谢谢!
public class Inventory extends JPanel
{
     public Inventory()
     {
         setLayout(null);
         setSize(400, 300);
         setBackground(Color.BLACK);
         addKeyListener(this);
         setFocusable(true);
     }
}
JPanel mainPanel = new JPanel(); //will hold BOTH panels
JPanel gamePanel = new Game(myCharacter); //declare game panel
JPanel inventoryPanel = new Inventory(); //declare inventory panel

//set up some layout
mainPanel.setLayout(new GridLayout(2, 1));

//add the graphics panel, then add the inventory
mainPanel.add(gamePanel);
mainPanel.add(inventoryPanel);