Tout d'abord, s'il vous plaît ne me gravez pas au bûcher pour créer une question alors que d'autres avec des noms et des contenus similaires existent. J'ai regardé à travers eux tous, mais n'a trouvé aucune solution. Appeler repaint() n'appelle absolument pas paintComponent(), peu importe ce que j'ai l'air d'essayer. Voici tout le code lié au problème:repaint() n'appelle pas paintComponent()
@Override
public void mouseClicked(MouseEvent e) {//User clicks on play button, creates a new Level object. Level extends JPanel.
if(isOnPlayButton(e.getPoint())){
GameState.setState(GameState.INGAME);
Level l = new Level(2);
l.setVisible(true);
Tetris.getWindow().setContentPane(l);
Soundtrack.updateAudio();
System.out.println("Level panel created and content pane set");
}
}
Comme prévu, « panneau de niveau créé et jeu de volet contenu » est imprimé à la console.
@SuppressWarnings("serial")
public class Level extends JPanel implements ActionListener{
private final int levelNum;
public Level(int levelNum){
this.levelNum = levelNum;
this.repaint();//Although this should work in the constructor, how about a Timer that repaints for confirmation?
new Timer(2*1000, this).start();
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(Tetris.getTexture("LevelBackdrop.png"), 0, 0, null);
System.out.println("paintComponent - level painted");
g.setColor(new Color(255, 255, 0));
g.drawString("2", 355, 55);
}
public int getLevelNum() {
return levelNum;
}
public double getGravity(){
return levelNum/4;
}
@Override
public void actionPerformed(ActionEvent e) {
this.repaint();
System.out.println("Timer repainting");
}
}
"paintComponent - niveau peint" n'est jamais imprimé. Le "repeindre minuterie" s'imprime toutes les 2 secondes, comme prévu.
pouvez-vous simplement supprimer le minuteur l'essayer, et retirer ce repaint() du constructeur de niveau – whyn0t
Je suggère Swingworkers: http://stackoverflow.com/questions/782265/how-do-i-use-swingworker-in -java –
Je recommande de poster un [mcve]. Comme c'est actuellement, on ne peut pas reproduire ce que vous vivez et il ne semble pas y avoir quelque chose d'évident (du moins ce que je vois) du code affiché. – copeg