基本上我试图做的是将JPanel添加到另一个使用paintComponent()方法绘制图形的JPanel上。但是我试图添加的JPanel没有显示,因为它被JPanel w / Graphics覆盖了。
我怎样才能这样做,以便当我将JPanel添加到一个w / graphics时,它会在前面显示JPanel而不是被图形掩盖?
所有答案都表示赞赏! :)
如果你需要代码,请告诉我,我很乐意把它放在这里。
这里是代码:
package javavideogame;
public class Game extends JPanel implements ActionListener, Runnable
{
public Game(MainCharacter character)
{
setLayout(null);
setFocusable(true);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(ground, 0, 0, this);
g.drawImage(character.getImage(), character.getX(), character.getY(), this);
g.setColor(Color.RED);
g.drawRect(10, 10, character.getMaxHealth(), 10);
g.fillRect(10, 10, character.getHealth(), 10);
g.dispose();
}
public void getInventoryScreen()
{
Main.inv = new Inventory();
Main.game.add(Main.inv);
}
}
package javavideogame;
public class Game extends JPanel implements ActionListener, Runnable
{
public Game(MainCharacter character)
{
setLayout(null);
setFocusable(true);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(ground, 0, 0, this);
g.drawImage(character.getImage(), character.getX(), character.getY(), this);
g.setColor(Color.RED);
g.drawRect(10, 10, character.getMaxHealth(), 10);
g.fillRect(10, 10, character.getHealth(), 10);
g.dispose();
}
public void getInventoryScreen()
{
Main.inv = new Inventory();
Main.game.add(Main.inv);
}
}
这是我正在添加到Game JPanel的JPanel的代码
public class Inventory extends JPanel
{
public Inventory()
{
setLayout(null);
setSize(400, 300);
setBackground(Color.BLACK);
addKeyListener(this);
setFocusable(true);
}
}
答案 0 :(得分:1)
通过覆盖paintComponent(...)方法完成自定义绘制。我的猜测是你要覆盖paint()方法。
从Custom Painting的Swing教程中阅读本节。因为你要覆盖错误的方法,所以你最先绘制孩子,然后在顶部完成自定义绘画。
如果您需要更多帮助,请发布展示问题的SSCCE。
答案 1 :(得分:0)
提醒一下:java.awt和javax.swing混合不好。当你在一个面板上绘制东西并尝试向其添加JPanel时,你一定会遇到问题。一个更好的解决方案是拥有2个不同的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);
这样可以避免摆动和摆动组件混乱,为您节省很多麻烦。