2011-02-20 3 views
0

Je ne sais pas pourquoi mais rien n'apparaît? Je suppose d'avoir une applet d'une maison.Mon applet Java n'apparait pas

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.event.*; 


public class color extends JApplet 
{ 
    public void init() 
    { 
     addMouseListener(new MyMouseListener()); 
     getContentPane().setBackground(Color.white); 
    } 
    public class MyMouseListener implements MouseListener 
    { 
    public void mouseClicked(MouseEvent e) 
    { 
      int x = e.getX(); 
      int y = e.getY(); 
      boolean closeDoors = true; 

      if(x>330 && x<280 && y>20 && y<20) 
      { 
       closeDoors = false; 
       repaint(); 

      } 

    } 
    public void mouseEntered(MouseEvent e) { } 
    public void mouseExited(MouseEvent e) { } 
    public void mousePressed(MouseEvent e) { } 
    public void mouseReleased(MouseEvent e) { } 
    } 
    public void paint (Graphics g, boolean closeDoors) 
      { 
       super.paint (g); 

       do 
       { 
       g.drawLine (35, 50, 570, 50); 
       g.drawLine (35, 50, 250, 0); 
       g.drawLine (250, 0, 570, 50); 
       g.drawRect (50, 50, 500, 350); 
       g.fillRect (100, 75, 80, 80); 
       g.fillRect (400, 75, 80, 80); 
       g.fillRect (240, 200, 125, 200); 
       } 
       while (closeDoors = true); 

       if (closeDoors = false); 
       { 
       g.drawLine (35, 50, 570, 50); 
       g.drawLine (35, 50, 250, 0); 
       g.drawLine (250, 0, 570, 50); 
       g.drawLine (180, 120, 100, 120); 
       g.drawLine (400, 120, 480, 120); 
       g.drawLine (140, 75, 140, 160); 
       g.drawLine (450, 75, 450, 160); 
       g.drawRect (50, 50, 500, 350); 
       g.drawRect (100, 75, 80, 80); 
       g.drawRect (400, 75, 80, 80); 
       g.drawRect (240, 200, 125, 200); 
       g.drawOval (330,280, 20, 20); 
       } 
      } 
} 
+2

Avez-vous veillé à compiler votre applet? Si vous l'avez fait, veuillez inclure l'applet HTML/object/embed tag que vous avez utilisé pour montrer votre applet dans votre question –

Répondre

2

Je vais essayer de vous aider à obtenir sur la bonne voie :-)

Vous savez peut-être, mais si vous n'êtes pas à l'aide un IDE, je recommande d'utiliser appletviewer pour développer vos applets au lieu d'un navigateur. Juste matière à réflexion :-)

Tout d'abord, la suggestion de Toader Mihai Claudiu est correcte. Changer

  do 
      { 
      g.drawLine (35, 50, 570, 50); 
      g.drawLine (35, 50, 250, 0); 
      g.drawLine (250, 0, 570, 50); 
      g.drawRect (50, 50, 500, 350); 
      g.fillRect (100, 75, 80, 80); 
      g.fillRect (400, 75, 80, 80); 
      g.fillRect (240, 200, 125, 200); 
      } 
      while (closeDoors = true); 

      if (closeDoors = false); 
      { 

dans

  if (closeDoors) 
      { 
      g.drawLine (35, 50, 570, 50); 
      g.drawLine (35, 50, 250, 0); 
      g.drawLine (250, 0, 570, 50); 
      g.drawRect (50, 50, 500, 350); 
      g.fillRect (100, 75, 80, 80); 
      g.fillRect (400, 75, 80, 80); 
      g.fillRect (240, 200, 125, 200); 
      } 
      else 
      { 

Sinon, vous allez être aussi longtemps que la peinture closeDoors est vrai. Vous avez juste besoin de peindre une fois. Java vous demandera de repeindre quand il le faut (par exemple, lorsque vous appelez repaint()).

De plus, définissez closeDoors comme variable. En d'autres termes, ont:

public class color extends JApplet 
{ 
    public boolean closeDoors = false; 

Et lorsque vous changez la valeur de closeDoors dans l'auditeur de clic, vous pouvez simplifier comme:

 int x = e.getX(); 
     int y = e.getY(); 

     if(x>330 && x<280 && y>20 && y<20) 
     { 
      closeDoors = !closeDoors; 
      repaint(); 

     } 

qui, lorsque vous cliquez dans votre domaine, inverser la valeur de closeDoors. En d'autres termes, si closeDoors est true, il sera défini sur false et vice versa. Notez que votre code if(x>330 && x<280 && y>20 && y<20) ne fonctionnera probablement pas du tout, puisque y ne peut pas être supérieur à 20 et inférieur à 20 en même temps. Je vais vous laisser jouer avec ça pour comprendre ce qui fonctionne :-).

Espérons que cela aide.


Juste un petit détail, mais vous devriez probablement appeler votre classe Color au lieu de color suivre Java de standard naming convention, ou appeler quelque chose d'autre si vous ne voulez pas entrer en conflit avec java.awt.Color.

+0

L'applet ne s'initialise pas – lonesarah

+0

@ user516805 Comment visualisez-vous votre application? Est-ce via un navigateur Web? Vous pouvez ajouter à votre question votre message d'erreur, ainsi que votre balise d'applet (ou d'objet) html. –

+0

Je ne reçois pas de message d'erreur. – lonesarah

3

Vous effectuez probablement un bouclage à l'intérieur de la méthode paint. Cela semble être une boucle infinie là-bas.

do 
{ 
    g.drawLine (35, 50, 570, 50); 
    g.drawLine (35, 50, 250, 0); 
    g.drawLine (250, 0, 570, 50); 
    g.drawRect (50, 50, 500, 350); 
    g.fillRect (100, 75, 80, 80); 
    g.fillRect (400, 75, 80, 80); 
    g.fillRect (240, 200, 125, 200); 
} while (closeDoors = true); 

Je le remplacer par:

if (closeDoors = true) 
{ 
    g.drawLine (35, 50, 570, 50); 
    g.drawLine (35, 50, 250, 0); 
    g.drawLine (250, 0, 570, 50); 
    g.drawRect (50, 50, 500, 350); 
    g.fillRect (100, 75, 80, 80); 
    g.fillRect (400, 75, 80, 80); 
    g.fillRect (240, 200, 125, 200); 
} 
+0

Cela n'a pas fonctionné – lonesarah

+2

Il est temps de faire un peu de débogage. Utilisez des instructions println tout au long du programme pour vous dire ce qu'il fait. –

+0

J'utilise des instructions println. Cela fonctionne jusqu'à ce que j'arrive au passage cliqué de souris. Je ne sais pas ce que cela signifie – lonesarah

1

Généralement, dans Swing, vous ne devez jamais remplacer la méthode paint(), mais plutôt paintComponent. (Je ne suis pas sûr de JApplet, cependant - je peindreais plutôt sur un JPanel dans l'applet, pas sur l'applet lui-même.)

Et pas de boucle sans fin dans votre méthode de peinture - il devrait revenir rapidement, ne pas travailler éternellement , comme l'a déjà dit le Toader.

Mais ce n'est pas votre problème, apparemment, comme vous avez écrit dans un commentaire:

Je reçois Applet n'initialisant pas

Ajouter ces informations (important!) À la question (il a un lien d'édition pour une raison, vous savez).

Votre navigateur doit avoir une console Java quelque part, utilisez-la et regardez s'il y a un message d'erreur. Copiez ceci (y compris le stacktrace, le cas échéant) à votre question. Cela pourrait nous permettre de vous aider.

(Si vous utilisez OpenJDK avec le icedtea-Plugin sous Linux, regardez ~/.icedteaplugin/java.stderr et au lieu ~/.icedteaplugin/java.stdout, ils ne mettent pas en œuvre encore la console Java.)

+0

"Généralement, dans Swing, vous ne devez jamais surcharger la méthode paint() mais paintComponent (je ne suis pas sûr de JApplet, cependant - je peindrais plutôt sur un JPanel dans l'applet, pas sur l'applet lui-même.)" - C'est correct. –

+0

J'ai changé mon code et j'ai utilisé le composant Paint, mais cela ne fonctionne toujours pas?> – lonesarah

+0

J'ai mis en évidence le bit important de ma réponse - jetez un oeil à la console Java, et copiez la sortie à votre question. –

1

Un autre problème. Vous surchargez ne pas réellement ignorer paint (ou paintComponent). Ajouter @Override et le compilateur vous dira de votre erreur:

@Override public void paint(Graphics g, boolean closeDoors) { // wont compile 

On dirait que vous avez besoin d'un cours de débogage. À tout le moins mettre quelques System.err.println s et vérifier la console Java.

+0

lorsque je tape println sous void public mouseClicked (MouseEvent e) je ne vois pas dans la console – lonesarah

+0

'MouseListener's sont un peu étrange. Ils font remonter les événements dans l'arborescence des composants, mais s'arrêtent lorsqu'il y a des écouteurs sur un composant. Pour un Swing 'JApplet' (ou' JFrame'), par opposition à un simple 'Applet', vous devez généralement définir un composant comme volet de contenu avec tout ce qu'il contient. Cela peut fonctionner si vous faites 'getContentPane(). AddMouseListener (...)', mais mieux vaut vous déplacer et peindre en écoutant un composant différent (sous-classe 'JComponent', remplacer' paintComponent', 'setOpaque', Définir le code d'avant et d'arrière-plan, et ajouter votre écouteur, que 'setContentPane' avec cela –

+0

(Scinder le code d'être dépendant de l'applet rend plus propre et plus facile à tester dans un' JFrame' sans un navigateur (ou un faux navigateur). La suppression des dépendances parasites est souvent une très bonne idée. –