2009-04-12 11 views
0

Je sais que ça va être une question stupide. Pardonnez-moi comme un n00b dans CSDiviser un contrôle d'oscillation en parties égales

J'ai un nouveau composant de swing qui hérite de JComponent. J'essaie de peindre des lignes sur sa surface pour montrer que les lignes divisent le contrôle en parties égales. . Le code ressemble

int spc; 
spc = (int) Math.round((this.ZBar.getWidth()/this.ZBar.getModel().getModelSize())); 

     for (int i = 0; i <= this.ZBar.getModel().getModelSize(); i++) { 
      g.drawLine(i * spcing, 0, i *, this.ZBar.getHeight()); 

     } 

this.ZBar.getModel() getModelSize(); donne le nombre de pièces à diviser en. Cependant, dans certains cas, il reste de l'espace sur la partie la plus à droite de mon composant. Je suppose que c'est la conversion de type faite par Math.round. Comment puis-je resoudre ceci ??

Répondre

0

Merci beaucoup pour la réponse. Résolu ceci. J'ai fait tout ce mess entier pour doubler. Puis utilisé le package Java2D pour gérer les doubles.

Création de support de classe Line2D en utilisant des paramètres doubles.

0

Le code que vous avez posté ne sera pas compilé en raison d'erreurs de syntaxe, mais je ne vois aucun problème immédiat avec votre approche. Vous avez dit que le problème se présente de façon intermittente. Cela suggère que le problème pourrait résider dans la manière dont swing balaye et comment vous gérez cela dans votre code. Essayez de lire à ce sujet.

1

C'est parce que cette division est une division de type int. Par exemple:

5/2 == 2 

Math.round ne fait rien ici. Il est déjà arrondi (comme Math.floor à la place).

Pour obtenir votre effet désiré, l'int jeté à une double avant la division:

(double)5/2 == 2.5 

Ou dans votre cas particulier:

spc = (int) Math.round(((double)this.ZBar.getWidth()/this.ZBar.getModel().getModelSize())); 
Questions connexes