2017-09-24 2 views
0

J'essaie de construire un rectangle dans un rectangle. Rectangle "murs" devrait être dans une position particulière avec une hauteur qui est bg.getHeight() - ground.getHeight(). Pour une raison quelconque, le rectangle "murs" s'étend toujours au bas de l'applet. Toutes les autres valeurs telles que la largeur et les positions fonctionnent correctement. Avec une applet de 300 hauteurs, si je soustrais un 120 statique, ça marche, mais la valeur de ground.getHeight est en fait de 60, et si je soustrais 60, ça descend tout le long de la frontière. Je suis confus avec l'incohérence.java Rectangle getHeight() comportement impair


import javax.swing.JApplet; 
import java.awt.*; 

public class House_JM extends JApplet { 

    public void paint(Graphics page) { 
     Rectangle ground = new Rectangle(0, (int) (getSize().height * .8), getSize().width, 
       (int) (getSize().height * .2)); 
     Rectangle bg = new Rectangle(0, 0, getSize().width, (int) (getSize().height * .8)); 
     page.setColor(Color.green); 
     page.fillRect((int) ground.getX(), (int) ground.getY(), (int) ground.getWidth(), (int) ground.getHeight()); 
     page.setColor(Color.blue); 
     page.fillRect((int) bg.getX(), (int) bg.getY(), (int) bg.getWidth(), (int) bg.getHeight()); 
     Rectangle walls = new Rectangle((int) (bg.getWidth()/2 - bg.getWidth() * .1), (int) (bg.getHeight() * .5), 
       (int) (bg.getWidth() * .4), (int) ((bg.getHeight() - ground.getHeight()))); 
     page.setColor(Color.red); 
     page.fillRect((int) walls.getX(), (int) walls.getY(), (int) walls.getWidth(), (int) walls.getHeight()); 
     System.out.println(bg.getHeight()); 
    } 
} 
+1

Veuillez créer et publier un programme valide [mcve], *** *** avec du code que nous pouvons copier, coller, compiler et exécuter, et qui démontre votre problème. Ne pas demander le programme entier, juste assez pour que nous puissions tester complètement. –

+0

En outre, dessinez-vous directement dans l'applet? Ne faites pas cela mais dessinez plutôt dans un JPanel qui est affiché par l'applet. Aussi, pourquoi utilisez-vous même des applets car cette technologie a été abandonnée par Oracle? –

+0

Article édité avec code complet. J'utilise une applet parce que c'est une tâche scolaire. – user1660886

Répondre

0

Le noyau de la réponse a déjà été donnée dans les commentaires: « Votre calcul est off ». Les calculs que vous avez faits ont tout simplement été faux et n'ont pas de sens.

La raison principale pourquoi je réponds à cela (sinon pauvre) question que je me suis demandé: Comment est-il possible que quelqu'un écrit ce code, et pense qu'il pourrait même être à distance acceptable en termes de style? Oui, le «style» peut être subjectif, dans une certaine mesure. Mais lorsque l'on compare le code dans la question, et le code ci-dessous, on pourrait avoir du mal à discuter de cette ...

Voici un exemple qui montre le résultat que vous essayez susceptibles d'atteindre:

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.geom.Rectangle2D; 

import javax.swing.JApplet; 

public class House_JM extends JApplet { 

    @Override 
    public void paint(Graphics g) { 
     Graphics2D page = (Graphics2D)g; 

     int w = getWidth(); 
     int h = getHeight(); 

     Rectangle2D ground = new Rectangle2D.Double(
      0, h * 0.8, w, h * 0.2); 

     Rectangle2D bg = new Rectangle2D.Double(
      0, 0, w, h * 0.8); 

     Rectangle2D walls = new Rectangle2D.Double(
      bg.getWidth() * 0.5 - bg.getWidth() * 0.1, 
      bg.getHeight() * 0.5, 
      bg.getWidth() * 0.4, 
      h * 0.4); 

     page.setColor(Color.green); 
     page.fill(ground); 
     page.setColor(Color.blue); 
     page.fill(bg); 
     page.setColor(Color.red); 
     page.fill(walls); 

     System.out.println(bg.getHeight()); 
    } 
} 

Notez que la hauteur du rectangle walls doit être la hauteur des temps d'applet 0.4, car il commence à bg.getHeight() * 0.5, ce qui est la hauteur des temps d'applet 0,4, et le sol a une hauteur de 0,2 fois la hauteur de l'applet.

+0

Ok, merci. ça m'a fait commencer. Mon but était de ne pouvoir faire appel qu'aux attributs de la forme environnante au lieu de l'applet. Je pourrais vouloir décomposer différemment après sa construction et je voulais que chaque partie soit contenue. J'ai pris le "h * 0.4", qui bien sûr fonctionne, et a fait "(int) (bg.getHeight() * .5)" qui m'a eu le même résultat correct et dans le mode que je voulais. En ce qui concerne le style, étant 3 chapitres dans mon premier semestre de programmation, je suppose que je ne suis pas si poli. :) – user1660886

+0

J'aime l'idée de mettre la section de remplissage de couleur séparément. ne savait pas à propos de page.fill() – user1660886