2017-10-14 6 views
-1

J'ai essayé cela pendant des heures maintenant sans succès.Comment puis-je utiliser une méthode d'une classe dans une classe différente?

J'essaie d'utiliser la méthode paintComponent dans ma classe Game.java, mais je ne sais pas exactement comment procéder.

J'ai essayé d'appeler la fonction directement, mais bien sûr, cela ne fonctionne pas car il faut retourner quelque chose.

La méthode que je dois utiliser est dans cette classe "Circles.java":


package testgame; 

import java.awt.BasicStroke; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.awt.geom.AffineTransform; 
import java.awt.geom.Ellipse2D; 
import javax.swing.JPanel; 
import javax.swing.JPanel; 

public class Circles extends JPanel { 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Bubbles(g); } 

    private void Bubbles(Graphics g) { 
     Graphics2D g2d = (Graphics2D) g; 
     RenderingHints rh 
       = new RenderingHints(RenderingHints.KEY_ANTIALIASING, 
       RenderingHints.VALUE_ANTIALIAS_ON); 
     rh.put(RenderingHints.KEY_RENDERING, 
       RenderingHints.VALUE_RENDER_QUALITY); 
     g2d.setRenderingHints(rh); 
     int x, y, size; 
     x = (int) (Math.random() * 500) + 15; 
     y = (int) (Math.random() * 450) + 15; 
     size = (int) (Math.random() * 30) + 10; 
     g2d.setColor(Color.green); 
     g2d.drawOval(x, y, size, size); } 
} 

Ceci est la classe qui a besoin de la méthode paintComponent (Game.java):


package testgame; 

import java.awt.EventQueue; 
import javax.swing.JFrame; 

public class Game extends JFrame { 

    public static void LoadUI() { 
     JFrame frame = new JFrame("Just a test!"); 
     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); 
     frame.setSize(550, 500); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); } 

public static void main(String[] args) { 
    frame.add(new (Circles())); } 
} 

L'erreur que je reçois est le:

frame.add(new (Circles())); 

L'être d'erreur:

identifier expected 

cannot find symbol 
symbol: method Circles() 
location: class Game 

cannot find symbol 
symbol: variable frame 
location: class Game 
+0

Possible copie de [paint() et repaint() en Java] (https://stackoverflow.com/questions/10768619/paint-and-repaint-in-java) –

+0

au lieu de frame.add (new (Cercles())); écrivez frame.add (new Circles()); – keuleJ

Répondre

0

Ce que vous essayez de faire ici frame.add(new (Circles())); à l'intérieur de votre méthode principale est l'accès à une variable qui est seulement disponible dans votre méthode LoadUI().

Pour pouvoir accéder à cette variable, vous devrez déclarer en dehors de votre méthode LoadUI(), quelque chose comme ceci:

... 
    public class Game extends JFrame { 

    JFrame frame; 

    public static void LoadUI().... 

En second lieu, comme Manish Jaiswal mentionné ci-dessus, votre placement de crochets est faux, ce qui signifie votre chemin d'initialiser l'objet Circles est incorrect.

Pour faire ce travail de code, vous pouvez faire quelque chose comme ceci dans votre méthode principale:

LoadGUI(); 
frame.add(new Circles()); 

Bien que je vous conseille d'utiliser une classe/objet pour votre GUI/JFrame et ne pas faire à part la méthode LoadUI() statique . Vous pouvez également mettre en retrait votre code d'une manière plus facile à lire, juste pour le rendre plus facile pour vous-même :)

+0

Ayy remercie mon pote, ça a marché! J'ai déclaré la variable comme ceci: public static JFrame frame = new JFrame ("Juste un test!"); et Java l'a bien compris! En passant, pensez-vous que je devrais déléguer chaque classe pour faire une fonction spécifique (comme dessiner le cercle, charger l'interface utilisateur) et ensuite exécuter tout cela dans le principal? –

+0

@GianfrancoStercoforti Eh bien, en général Java est un langage orienté objet, ce qui signifie que oui, vous pouvez utiliser une classe séparée pour chaque fonction. Mais ce que vous devriez essayer de faire est de classes de modèles (juste en partie) après une sorte d'objet. C'est pourquoi il y a JFrame. Il est censé représenter une fenêtre, en gros. Vous pourriez faire la même chose avec la classe File, qui représente un fichier. Je vous recommande donc d'utiliser des méthodes séparées pour charger l'interface utilisateur, et ainsi de suite, mais peut-être la conserver dans la même classe et travailler avec des objets/classes pour des choses comme la gestion de fichiers. – privoid

0

Tout d'abord, il devrait être new Circle() au lieu de nouveau (Cercle())

La deuxième chose comme new et Circle() tous les deux sont dans différents parenthèses, java traitent Circle() comme méthode de jeu de classe d'où vous obtenez l'erreur comme cela.