PaintComponent не вызывается

77
8

Я только начинаю изучать, как программировать, поэтому извините меня, если мой вопрос просто глупо. Я пытался более двух дней найти решение этой проблемы, и я просто не могу найти ее по сети, поэтому мне нужна ваша помощь. Спасибо заранее.


Итак, я пытаюсь воссоздать игру Parchisi на Java. Я хочу создать метод, который ставит счетчик в определенной позиции каждый раз, когда игрок бросает кости и получает число пять в результате.
Счетчик имеет свой собственный класс, то есть:


package parchis;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class Ficha extends JPanel
{
public static int x;
public static int y;
public Image imagenficha;

@Override
public void paintComponent(Graphics g){

super.paintComponent(g);

System.out.println("Ejecutándose función de pintura de ficha");
g.drawImage(imagenficha,x,y,this);
g.setColor(Color.RED);
g.fillRect(0,0,20,20);
}

Ficha(int color, int locx, int locy, int ancho, int alto){

this.setSize(60,60);
System.out.println("El color es el "+Servidor.turno);
this.setBounds(locx,locy,ancho,alto);
x=locx;
y=locy;
this.setVisible(true);
}


Контроллер помещается над jframe вызовом этого метода:


public void pintarficha(){

Ficha ficha = new Ficha(Servidor.turno,40,40,100,100);
jframe.getContentPane().add(ficha);
Refrescar();
}


Refrescar:


public static void Refrescar(){

jpanel.add(jlabel);
jframe.add(jpanel);
jframe.pack();
}


Проблема заключается в том, что когда метод pintarficha() вызывается извне метода (IE в экземпляре одного из моих классов), он работает правильно и рисует счетчик, но когда я помещаю его внутри любого метода, PaintComponent не выполняется, и я не понимаю, почему.


Здесь он работает:


package parchis;
public class Administradordereglas {

Administradordereglas(){
********** Menu.menu.pintarficha(); ****************
}

void juegodebots(int jugador){

System.out.println("LLAMADA A JUEGO DE BOTS");
int valoraañadiralasposiciones;
valoraañadiralasposiciones= Ventanadeordenes.dado.Tiraeldado();

if(valoraañadiralasposiciones==5){

System.out.println("Se ha sacado un 5, procedo a crear una nueva ficha");
}

Parchis.servidor.Pasarturno();
}
}


Но здесь это не так:


package parchis;
public class Administradordereglas {

Administradordereglas(){

}
void juegodebots(int jugador) {

System.out.println("LLAMADA A JUEGO DE BOTS");
int valoraañadiralasposiciones;
valoraañadiralasposiciones= Ventanadeordenes.dado.Tiraeldado();
if(valoraañadiralasposiciones==5){
**************This message appears in the console:******************
System.out.println("Se ha sacado un 5, procedo a crear una nueva ficha");

*****************Menu.menu.pintarficha();*************************
}
Parchis.servidor.Pasarturno();
}
}


Спасибо за вашу помощь.

спросил(а) 2020-04-04T00:12:24+03:00 3 месяца назад
1
Решение
55

Можете ли вы добавить repaint() в свой метод Refrescar:

public void refrescar() {

jpanel.add(jlabel);
jframe.add(jpanel);
jframe.pack();
jframe.repaint();
}

ответил(а) 2020-04-04T00:28:20.734616+03:00 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема