2017-10-14 4 views
-1

Ich habe das schon seit Stunden versucht, ohne Erfolg.Wie kann ich eine Methode aus einer Klasse in einer anderen Klasse verwenden?

Ich versuche, die PaintComponent-Methode in meiner Game.java-Klasse zu verwenden, aber ich bin mir nicht sicher, wie genau das geht.

Ich habe versucht, die Funktion direkt aufzurufen, aber natürlich funktioniert es nicht, da es etwas zurückgeben muss.

Die Methode, die ich verwenden müssen, ist in dieser "Circles.java" Klasse:


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); } 
} 

Dies ist die Klasse, die die Methode paintcomponent (Game.java) benötigt:


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())); } 
} 

Der Fehler, den ich bekommen, ist bei der:

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

Der Fehler Wesen:

identifier expected 

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

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

Mögliches Duplikat von [paint() und repaint() in Java] (https://stackoverflow.com/questions/10768619/paint-and-repaint-in-java) –

+0

statt frame.add (neu (Circles())); schreibe frame.add (neue Kreise()); – keuleJ

Antwort

0

Was Sie hier versuchen möchten frame.add(new (Circles())); Innerhalb Ihrer Hauptmethode greift man auf eine Variable zu, die nur in Ihrer LoadUI()-Methode verfügbar ist.

Um in der Lage zu sein, diese Variable zugreifen Sie es außerhalb Ihrer LoadUI() Methode, um so etwas zu erklären brauchen würden:

... 
    public class Game extends JFrame { 

    JFrame frame; 

    public static void LoadUI().... 

Zweitens, wie Manish Jaiswal oben erwähnt, Ihre Platzierung von Klammern falsch ist, was bedeutet, den Weg Initialisierung des Circles Objekts ist falsch.

Um diesen Gutscheincode Arbeit zu machen, könnten Sie so etwas wie dies in der Haupt Methode tun:

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

Obwohl ich für Ihre GUI/JFrame und nicht machen die LoadUI() Methode statisch eine eigene Klasse/Objekt verwenden würde empfehlen, . Sie könnten Ihren Code auch einfacher einlesen, um es einfacher für Sie zu machen :)

+0

Ayy danke Kumpel, es hat funktioniert! Ich habe die Variable folgendermaßen deklariert: public static JFrame frame = neuer JFrame ("Just a test!"); und Java hat es richtig gemacht! Übrigens denkst du, ich sollte jede Klasse delegieren, um eine bestimmte Funktion auszuführen (wie den Kreis zu zeichnen, die UI zu laden) und dann alles im Wesentlichen auszuführen? –

+0

@GianfrancoStercoforti Nun, im Allgemeinen ist Java eine objektorientierte Sprache, was bedeutet, dass Sie ja eine separate Klasse für jede Funktion verwenden könnten. Aber was Sie versuchen sollten, ist Modellieren (nur teilweise) nach irgendeiner Art von Objekt. Deshalb gibt es JFrame. Es soll im Großen und Ganzen ein Fenster darstellen. Sie könnten das Gleiche mit der Dateiklasse tun, die eine Datei darstellt. Also ich würde empfehlen, dass Sie verschiedene Methoden zum Laden der Benutzeroberfläche usw. verwenden, aber vielleicht in der gleichen Klasse und arbeiten mit Objekten/Klassen für Dinge wie Dateiverwaltung statt (separater Zweck). – privoid

0

Zu allererst Es sollte new Circle() statt neuen (Kreis()) sein

Zweite Sache wie new und Circle() beide sind in verschiedenen Brackets, Java-Behandlung Circle() als Methode des Klassenspiels daher Sie erhalten Fehler so.

Verwandte Themen