2011-09-24 2 views
2

J'ai une extension JPanel appelée TPanel, qui peint le mot Tetris sur le côté droit du JFrame. La méthode curr() renvoie la pièce en cours qui se déplace et est délimitée sur le côté gauche (x < 400) du JFrame. Maintenant, pour une raison quelconque, lorsque je les ajoute à la fois au JFrame, je ne peux voir que le second que j'ai ajouté, donc, fondamentalement, il remplace l'autre. J'ai essayé la méthode de validation et cela ne fonctionne pas.Swing Peinture problème?

Comment les afficher simultanément?

Voici le code:

public Tetris() 
{ 
// frame stuff 
super("Tetris"); 
this.setSize(616,636); 
this.setVisible(true); 
this.setDefaultCloseOperation(EXIT_O… 

// components 
occ = new boolean [30][20]; 
rnd = new Random(); 
info = new TPanel(); 
for(int i=0;i<occ.length;i++) 
for(int j=0; j< occ[i].length;j++) 
occ [i][j] = false; 
pieces.add(initPiece()); 
this.getContentPane().add(info); 
this.getContentPane().add(curr()); 



this.getContentPane().validate(); 
repaint(); 
this.addKeyListener(this); 
run(); 
} 
+2

Pour une meilleure aide plus tôt, postez un [SSCCE] (http://pscode.org/sscce.html). –

Répondre

3
  1. La mise en page par défaut d'un volet de contenu est BorderLayout
  2. Si un composant est ajouté à un BorderLayout sans contrainte, il est placé dans la CENTER. La position CENTER ne peut contenir qu'un seul composant ou conteneur.

Alors comme une estimation immédiate sur la façon de corriger l'extrait de code, essayez de changer:

this.getContentPane().add(curr()); 

Pour:

this.getContentPane().add(curr(), BorderLayout.LINE_END); 

Ou mieux encore:

add(curr(), BorderLayout.LINE_END); 
3
  1. extrait de code étrange, non compilable (par exemple setDefaultCloseOperation(EXIT_O…)
  2. getContentPane() est inutile en Java 5 et plus, supprimez ce
  3. Vous avez défini Focus pour TPanel
  4. Rechercher KeyBindings au lieu de KeyListener, puis vos clés être fonctionne correctement
  5. Ajouter à KeyBinding TPanel
  6. J'espère que vous avez Icons pour Tetris,
    • Mettre JLabels au TPanel
    • JLabel.setIcon(myTetrisIcon)
  7. Votre code pourrait être en dehors de EDT, plus "Concurency Swing", enveloppez sortie à l'interface graphique (code pour Icon Repeindre) dans invokeLater()
  8. Utilisation seulement javax.swing.Timer pour les animations
  9. Utilisez revalidate() et repaint()
  10. Mais s'il est la peinture sur mesure swing puis problème (s) devrait venaient de partout