2010-02-05 2 views
0
public void drawboard(Graphics g){ 
    g.setColor(Color.yellow); 
    for (int row = 0; row < board.length; row++){ 
     for (int col = 0; col < board[row].length; col++){ 
       g.drawString("X", col, row); 
      } 
    } 

Tout ce que j'obtiens est un carré jaune de 35x30 (variables pour ligne et col dans une autre partie du programme). Je ne vois aucun "X" du tout. J'ai essayé de l'espacer au cas où tout serait écrasé avec col + 10, rang + 10, mais cela ne l'affecte pas. J'ai changé de rang et de rang avec le même effet.Comment écrire des lignes et des colonnes avec drawString en Java

Merci.

+1

Pas le temps d'écrire une réponse, mais rappelez-vous que 'deux derniers paramètres de drawString' sont * les valeurs de pixel *, pas les valeurs de * caractères *. Au mieux, cela attirera un tas de X les uns sur les autres (puisque vous les dessinez seulement à 1 pixel l'un de l'autre et ils sont plus larges que 1 pixel). –

+0

merci. Je ne le savais pas sur la partie pixel. J'utilisais à l'aide de la console ou de belles applications web :). – johnny

Répondre

4

Les deuxième et troisième arguments drawString sont en pixels. Vous imprimez juste beaucoup de X sur eux-mêmes, décalés de 1 pixel et encore et encore, donc bien sûr tout ce que vous obtenez est un gros blob.

Qu'est-ce que vous voulez est de multiplier par la largeur/hauteur de vos lignes et Col. comme ceci:

g.drawString("X", col * columnWidth, row * rowHeight); 
+0

Merci (tout le monde). Pouvez-vous me dire pourquoi je me multiplie? Je suis sûr que c'est évident mais je ne comprends pas. – johnny

+0

donc j'ai besoin d'une autre variable pour la largeur et la hauteur en pixels? Est-ce exact? – johnny

+0

@johnny, Oui, vous devez déterminer la largeur de la colonne et la hauteur de la ligne en quelque sorte. Vous pouvez trouver 'g.getFontMetrics()' utile pour cela. – finnw

-1

Il n'y a rien de mal avec ce code. Pour ce morceau de code, bien sûr, vous voyez un rectangle jaune, car les X sont espacés de seulement 1 pixel.

Si vous fournissez drawString avec des coordonnées suffisantes, vous devriez voir votre X à ces coordonnées. Donc, si vous placez des variables col et row dans votre boucle comme vous l'avez expliqué, vous devriez voir plusieurs X dans plusieurs lignes/colonnes. (Mais n'oubliez pas de changer le tableau de bord dans ce cas, car il est possible que la boucle ne s'exécute pas du tout, si vous les espacer trop loin).

Peut-être pouvez-vous nous dire d'où appelez-vous ce code? Est-il exécuté dans la méthode paintComponent ou l'appelez-vous manuellement à partir d'un autre thread?

+1

Ce n'est pas parce qu'un morceau de code fonctionne comme "attendu par le code" que ce n'est pas faux: la plupart des programmes seraient corrects avec un tel raisonnement et un bug inexistant. S'il veut voir un tableau fait de X et tout ce qu'il voit est un rectangle jaune alors il y a quelque chose qui ne va pas avec son code;) – SyntaxT3rr0r

+0

Je suppose qu'il le savait, puisqu'il a écrit: "J'ai essayé de l'espacer au cas où a été écrasé avec col + 10, rang + 10, mais ça ne l'affecte pas, j'ai changé de col et de rang avec le même effet. Cela me dit, qu'il sait pourquoi il y a un rectangle jaune, alors j'ai supposé qu'il y avait quelque chose d'autre qui était faux et qu'il voulait que nous sachions pourquoi. C'est la raison pour laquelle j'ai écrit "il n'y a rien de mal avec ce code" en premier lieu, donc il ne s'inquiéterait pas trop de ce code, mais a commencé à chercher des solutions ailleurs. –

Questions connexes