Как добавить JPanel на другой JPanel с графикой? - PullRequest
2 голосов
/ 22 февраля 2011

По сути, я пытаюсь добавить JPanel на другой JPanel, который нарисовал на нем графику, используя метод paintComponent ().Но JPanel, который я пытаюсь добавить, не отображается, потому что он покрыт JPanel с графикой.

Как я могу сделать так, чтобы при добавлении JPanel к одному с графикойбудет отображать JPanel спереди вместо того, чтобы быть покрытым графикой?

Все ответы приветствуются!:)

Если вам нужен код, просто скажите мне, и я с радостью его здесь напишу.

Хорошо, вот код: </p> <pre><code>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); } }

А вот код для JPanel, который я добавляю в игру JPanel </p> <pre><code>public class Inventory extends JPanel { public Inventory() { setLayout(null); setSize(400, 300); setBackground(Color.BLACK); addKeyListener(this); setFocusable(true); } }

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Выборочная окраска выполняется путем переопределения метода paintComponent (...).Я предполагаю, что вы переопределяете метод paint ().

Прочтите этот раздел из учебника Swing по Custom Painting .Поскольку вы переопределяете неправильный метод, вы заканчиваете тем, что рисуете сначала детей, а затем настраиваемая живопись выполняется сверху.

Если вам нужна дополнительная помощь, чем опубликовать свой SSCCE , демонстрирующий проблему.

0 голосов
/ 22 февраля 2011

Просто напоминание: java.awt и javax.swing плохо сочетаются. Когда вы рисуете материал на одной панели И пытаетесь добавить к нему JPanel, вы неизбежно столкнетесь с проблемами где-то. Намного лучшим решением будет иметь 2 разных JPanels, один для вашей графики и один для вашего инвентаря.

Примерно так:

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);

Это предотвратит смешивание компонентов качания и затухания и избавит вас от головной боли.

...