2011-07-01 4 views
0

Im un peu nouveau en java, programmé depuis environ un an maintenant et im travaillant actuellement sur un projet qui permet à l'utilisateur de choisir une carte (worldmap par exemple) et ajouter des villes à cette carte en cliquant sur le carte. Lorsque l'utilisateur clique sur la carte, il saisit un nom et la ville est dessinée sur ces coordonnées, ce qui n'est pas un problème. Mon problème est que je veux aussi que le nom de la ville soit dessiné au-dessus de la ville, mais je ne peux pas le faire fonctionner pour une raison quelconque. Ce devrait être une tâche facile, mais j'essaye depuis plusieurs heures maintenant et ça commence à devenir très ennuyeux alors j'espère que quelqu'un d'autre peut m'aider avec cette simple demande.Mon drawString ne fonctionnera pas

Le code:

public class Rita extends JComponent{ 
    private boolean klickad=false; 
    protected int xx=0; 
    private int yy=0; 
    public Rita(int x, int y){ 
     xx=x; 
     yy=y; 
     setBounds(x, y, 20, 20); 
     setPreferredSize(new Dimension(20,20)); 
     setMaximumSize(new Dimension(20,20)); 
     setMinimumSize(new Dimension(20,20)); 
    } 

protected void paintComponent(Graphics g){ 
    super.paintComponent(g); 
     drawString(g, xx+5, yy); 
     if(klickad==false) 
      klickadVal(g, xx, yy); 

     else if(klickad==true) 
      oKlickadVal(g); 
    } 
public void drawString(Graphics g, int x, int y){ 
    setFont(new Font("Courier New", Font.PLAIN, 16)); 
    g.setColor(Color.BLACK); 
    g.drawString("Test test test test test", x, y); 
} 

public void klickadVal(Graphics g, int x, int y){ 
    g.setColor(Color.RED); 
    g.fillRect(0,0,getWidth(),getHeight()); 
} 

public void oKlickadVal(Graphics g){ 
    g.setColor(Color.BLUE); 
    g.fillRect(0, 0, getWidth(),getHeight()); 

Merci à l'avance /Jimmy

+0

Lorsque vous dites que vous ne pouvez pas le faire fonctionner, avez-vous des erreurs ou quelque chose comme ça? –

+0

Comment ça ne marche pas? La méthode est-elle appelée? La chaîne est-elle affichée? – Patrick

+1

Juste un indice: 'if (klickad == false) ... else if (klickad == true) ...' vaut mieux 'if (klickad == false) ... else ...' ou mieux 'if (! klickad) ... else ...' - 'klickad' ne peut être que vrai ou faux :) – Thomas

Répondre

0

Il est à cause de vos coordonnées de dessin doit être définir par rapport au composant. Vous définissez les limites du composant sur x,y,w,h et dessinez votre texte sur le même x et y.
Si x > w ou y > h, il ne sera pas visible.

Changer votre code à cela, en utilisant les coordonnées relatives aux commandes de dessin:

protected void paintComponent(Graphics g){ 
    super.paintComponent(g); 
     drawString(g, 5, 10); 
     if(klickad==false) 
      klickadVal(g, 0, 0); 

     else if(klickad==true) 
      oKlickadVal(g); 
} 

et être conscient de que votre zone de dessin est seulement 20px * 20px, en raison de votre largeur et la hauteur des bornes.

+0

Cela a fonctionné. Merci mec! Je ne me rendais pas compte que lors de l'utilisation de cette méthode, ma chaîne sera dessinée à l'intérieur du rectangle. Supposons que j'aie besoin d'un autre objet contenant seulement la méthode drawString avec mes coordonnées x et y + quelques pixles pour qu'il soit dessiné sur le rectangle. Merci –

0

Vous appelez klickadVal ou oKlickadVal après avoir peint la chaîne. Ces deux méthodes remplissent l'intégralité du composant avec une seule couleur qui écrase la chaîne que vous avez affichée.

+0

Pensé à ce sujet plus tôt, donc essayé de retirer le drawRect et seulement appelé drawString, mais cela n'a pas fonctionné, ce n'était pas le problème. Merci quand même pour votre contribution –

Questions connexes