2009-12-27 10 views
4

Voici le code:Comment initialiser un objet Graphics en Java?

import java.awt.*; 
import java.applet.*; 

public class anim1 extends Applet{ 

    public void paint (Graphics g) 
    { 
     g.drawString("",400,300); 
    } 

    public static void main(String ad[]) 
    { 
     anim1 a=new anim1(); 
     Graphics g1; 
     a.paint(g1); 
    } 
} 

Il dit que g1 est pas initialisé. Mais comment initialiser un cours abstrait?

Répondre

13

Eh bien, il y a deux problèmes ici 1:

Graphics g1; 
    a.paint(g1); 

Et vous obtenez l'erreur G1 est pas initialisé. En effet, la variable g1 n'est jamais définie sur rien, ce qui provoque une erreur de compilation. Pour obtenir le code à compiler, vous devez, à tout le moins faire:

Graphics g1 = null; 
    a.paint(g1); 

Cependant, que de toute évidence ne vous aidera pas trop. Vous obtiendrez une exception NullPointerException lorsque vous essayez d'exécuter votre code. Pour réellement faire vos graphiques pour vous tirer besoin de ceci:

anim1 a=new anim1(); 
    Graphics g1 = anim1.getGraphics(); 
    a.paint(g1); 

Toutefois, cela ne fonctionne toujours pas parce que anim1 n'apparaîtra à l'écran. Pour qu'il apparaisse à l'écran dont vous avez besoin quelque chose comme:

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

public class So1 extends Applet{ 

    public void paint (Graphics g) 
    { 
     g.drawString("hello",40,30); 
    } 

    public static void main(String ad[]) 
    { 

     JFrame jp1 = new JFrame(); 
     So1 a=new So1(); 
     jp1.getContentPane().add(a, BorderLayout.CENTER); 
     jp1.setSize(new Dimension(500,500)); 
     jp1.setVisible(true); 

    } 
} 

remarque maintenant, nous n'appelons en fait la peinture() nous fonctionner. Cela est géré par l'awt, qui choisit le contexte graphique, et appelle notre fonction de peinture pour nous. Si vous voulez, cependant, vous pouvez passer dans n'importe quel objet graphique que vous voulez et lui demander de s'appuyer sur cela.(Donc si vous voulez attirer votre composant sur une image, vous pouvez le faire)

(note, je change le nom de classe de anim1 OS1)

0

Vous devez manipuler les graphiques d'un composant dans la méthode paint et appeler repaint() ou update(), mais pas directement la méthode paint. Pour plus d'informations, commencez par here.

1

Une applet n'a pas besoin d'une méthode principale comme le fait une application Java normale. Je recommande de commencer par Sun's Applets Tutorial. En particulier, vous pouvez passer directement à la section Life Cycle of an Applet pour voir comment l'objet Graphics est géré dans l'applet.

0

au lieu d'un appel à peindre (Graphiques g) vous devez invoquer la méthode repaint ou mise à jour. Mais pour cela, votre classe doit appartenir à la hiérarchie dans le fichier java.awt.Container.

Pour votre classe, vous avez remplacé la méthode Paint et dans l'ensemble, vous essayez d'appeler la méthode paint. Au lieu de peindre, vous devez appeler la méthode repaint ou update (si votre classe est dans la hiérarchie de java.awt.Container) et le système de distribution d'événements de java appelle votre méthode de peinture surchargée elle-même.

0

Vous n'initialiser un objet graphique.

Vous obtenez l'objet graphique d'un composant via la méthode Component#getGraphics().

Dans votre cas particulier, je pense que repaint() est tout ce dont vous avez besoin !!

1

Tout ce que vous devez faire est de simplement supprimer la principale méthode comme si:

import java.awt.*; 
import java.applet.*; 

public class anim1 extends Applet { 

    public void paint (Graphics g) { 
     g.drawString("Hello",100,100); 
    } 
} 
+1

Pour que l'affichage soit actualisé, vous devez appeler la méthode repaint() sur une instance de votre objet anim1. – klyngbaek

0

vous n'êtes pas, vous utilisez getGraphics, mais, si vous voulez vraiment l'initialiser, puis tapez nouveau Graphics() {}; Et amusez-vous à remplir toutes les méthodes abstraites. La plupart du temps, juste mettre du code dans la peinture (g) devrait faire, vous devez vous rappeler de mettre votre applet visible, et généralement, il devrait être la dernière ligne dans votre constructeur ou même à l'extérieur, je me suis trompé une fois rendu visible puis initialisé un tas de variables, il a montré un écran noir pendant un moment.