Я провел много исследований и до сих пор не уверен, как решить эту проблему.Я пытаюсь сделать игру, и в ней мне нужен значок для отображения на экране в разных местах.Сейчас я просто пытаюсь сделать иконку видимой.
У меня есть класс, который обрабатывает ввод с клавиатуры (с именем KeyInputHandler) и другой класс (с именем DrawGameBoard), который создает окно и фон.В DrawGameBoard у меня есть метод, который называется moveIcon, который должен отображать значок.
public class DrawGameBoard extends JPanel
{
public static DrawGameBoard panel = new DrawGameBoard();
public static JFrame window = new JFrame("Fill the Boxes");
public static Container c = window.getContentPane();
public void moveIcon(int x, int y, JLabel label)
{
c.add(label);
//label.setLocation(x,y);
c.validate();
c.repaint();
System.out.println("tried to show a label");
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.GRAY);
g.fillRoundRect(5, 5, 585, 585, 15, 15);
for(int x = 25; x < 515; x+=79)
{
for(int y = 25; y< 515; y+=79)
{
g.setColor(Color.BLACK);
g.fillRect(x, y, 68, 68);
g.setColor(Color.WHITE);
g.fillRect(x+10, y+10, 48, 48);
}
}
}
public static void main(String[] args)
{
KeyInputHandler k = new KeyInputHandler();
//create the window
//JFrame window = new JFrame("Fill the Boxes");
window.setBounds(0, 0, 600, 630);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(false);
//create the panel
//DrawGameBoard panel = new DrawGameBoard();
//Container c = window.getContentPane();
panel.setBackground(new Color(0,222,222));
panel.addKeyListener(k);
panel.setFocusable(true);
//panel.setLayout(null);//doesnt use default locations
c.add(panel);
window.setVisible(true);
}
}
}
Это вызывается в KeyInputHandler
public void keyPressed(KeyEvent e)
{
System.out.println("keyPressed: ");
BoxGame b = new BoxGame();
DrawGameBoard d = new DrawGameBoard();
//create icons to be moved
MovingPlayerIcon icon1 = new MovingPlayerIcon(1,0);
JLabel p1fill = new JLabel();
p1fill.setIcon(icon1);
////////////////////////////////////////////////////////////////
//controls for p1
if (e.getKeyCode() == KeyEvent.VK_A) {
if(b.getX1()>0){
b.setPos(b.getX1()-1, b.getY1(), 1);
}
System.out.println("A");
d.moveIcon(0,0,p1fill);
}
////////////////////////////////////////////////////////////////
}
Итак, когда я нажимаю 'A', вызывается метод moveIcon.Я знаю, что вызывается метод moveIcon, потому что при нажатии клавиши «А» печатается «А» и печатается «попытка показать этикетку».Я попытался заменить мой значок обычным текстом JLabel, и он тоже не отображался.
Дополнительная информация:
У меня setLocation () закомментирован из класса moveIcon, потому что раньше у меня былоустановите макет JPanel на ноль (он больше не настроен).(Я хотел разместить иконки в определенных местах, но сейчас меня это не беспокоит)
BoxGame - это класс, который обрабатывает информацию о местоположении игроков, такую как текущие значения X и Y,Это не должно влиять на дисплей.
MovingPlayerIcon - это класс, который рисует значок цветами в зависимости от параметров.Опять же, я не думаю, что это влияет на отображение, так как я пытался заменить значок обычным текстом JLabel, и там тоже ничего не произошло.
Итак, есть идеи, почему JLabel не появляется?
Я программирую на Java чуть больше года.Я очень ценю ваше время и помощь.Дайте мне знать, если вам понадобится какая-либо дополнительная информация (я старался быть как можно более конкретным).Большое спасибо!