2017-11-28 3 views
-4

Ich bin ein Amateur-Java-Coder und ich möchte ein Spiel ähnlich SpaceInvaders machen.Warum werden meine Grafiken nicht angezeigt?

Ich frage mich, warum ist mein Rahmen leer, wenn ich versuche, meine PaintComponent Graphic über ein Panel hinzuzufügen, aber wenn ich meinen Code regelmäßig hinzufügen, zeigt es alle Ergebnisse?

Hier ist meine Objekte Klasse, wenn die Grafiken ohne Panel hinzugefügt werden, und es gibt keinen Konflikt:

package SS; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.io.Serializable; 
import java.util.*; 
public class objects extends JPanel{ 
private int rand1, rand2, y; 
int x=0; 
Random rand = new Random(); 
public class picture extends JPanel{ 
@Override 
public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    this.setBackground(Color.BLACK); 
    for (int c=0;c<=1000;c++){ 
     g.setColor(Color.yellow); 
     rand1=rand.nextInt(1920); 
     rand2=rand.nextInt(720); 
     g.drawOval(rand1, rand2, 1, 1);} 
    g.setColor(Color.MAGENTA); 
    g.fillRect(1920/2-x,720-100+y, 50, 50); 
     } 
    } 
} 

Nun ist diese Version meiner Objekte Klasse erzeugt ein leerer Rahmen

package SS; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.io.Serializable; 
import java.util.*; 
public class objects extends JPanel{ 
private int rand1, rand2, y; 
int x=0; 
Random rand = new Random(); 
public objects(){ 
    JPanel jp = new JPanel(); 
    picture p = new picture(); 
    jp.add(p); 
} 
public class picture extends JPanel{ 
@Override 
public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    this.setBackground(Color.BLACK); 
    for (int c=0;c<=1000;c++){ 
     g.setColor(Color.yellow); 
     rand1=rand.nextInt(1920); 
     rand2=rand.nextInt(720); 
     g.drawOval(rand1, rand2, 1, 1);} 
    g.setColor(Color.MAGENTA); 
    g.fillRect(1920/2-x,720-100+y, 50, 50); 
     } 
    } 
} 

Mein Ziel Eine externe Klasse um paintComponent zu erstellen ist, dass ich eine Komponente daraus für die zukünftige Schlüsselbindung machen kann.

Es macht mich verrückt! Ich habe auf dieser Seite gesucht und finde nichts! Wenn mir jemand die Ursache und die Lösung kann sagen, ich würde sehr dankbar it :)

Dies wird durch die Art und Weise meine Hauptklasse ist

package SS; 
import javax.swing.JFrame; 
public class mainframe { 
    public static void main(String[] args){ 
     JFrame mainFrame = new JFrame(); 
     mainFrame.setBounds(0, 0, 1920, 720); 
     mainFrame.setResizable(false); 
     mainFrame.getContentPane().add(new objects()); 
     mainFrame.setDefaultCloseOperation(mainFrame.EXIT_ON_CLOSE); 
     mainFrame.setVisible(true); 
    } 
} 

Ich bin offen für Kritik und richtige Formulierung für alles, was ich in diesen Worten Post.

einfach iterieren, was ich meine: ich die Grafiken, die ich aus meiner Methode paintcomponent zum JPanel als jp aufgelistet hinzufügen möchten, dann ist das JPanel meinem Rahmen in der Klasse mainframe hinzufügen

Auch Entschuldigung Wenn ich etwas verpasst habe, ist dies mein erster Post in StackOverflow.

+0

Ich habe versucht, den Code über das Textformat hinzufügen, aber es ließ mich nicht hinzufügen, so habe ich Screenshots. Es tut uns leid! – eyelikeboats

+1

Willkommen bei StackOverflow! Die Veröffentlichung von Bildern Ihres Codes wird nicht empfohlen, da Links in der Zukunft tot sein können und sie im Allgemeinen schwerer lesbar machen. Es wäre gut, wenn Sie Ihren Code direkt mit den Codeblöcken in die Antwort schreiben könnten. EDIT: Nur Ihren Kommentar oben gesehen. Welche Fehler bekommen Sie beim Versuch? –

+0

In Zukunft müssen Sie Code als Code und nicht als Bilder anzeigen. Wir können Bilder nicht in unsere IDEs kopieren und sie ausführen. Wenn die Seite Ihnen sagt, dass der Code zu groß ist, dann kürzen Sie ihn, aber stellen Sie sicher, dass er immer noch kompiliert und für uns läuft, ein [mcve]. Sehen Sie sich die Abschnitte zur [Hilfe] an. –

Antwort

0

Im zweiten Beispiel Sie picture Feld zu einem neuen jp Panel in objects Konstruktor aber das neuen Panel ist nicht auf die objects selbst hinzugefügt werden, hinzugefügt wird. Versuchen Sie, die folgende Zeile am Ende von objects Konstruktor hinzuzufügen: this.add(jp);.

aktualisieren, wie die gewünschte Größe angeben:

public class picture extends JPanel{ 

      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(500, 500); 
      } 
... 
} 
+0

Vielen Dank! Die Grafik zeigt sich im Rahmen, jedoch als extrem kleines Quadrat in der Mitte des Rahmens. Wenn ich weitere Hilfe benötige, werde ich es posten. Nochmals vielen Dank! – eyelikeboats

+0

Da Sie Ihrem Bild-Panel eine benutzerdefinierte Paint-Logik hinzufügen und keine anderen Swing-Komponenten hinzufügen, weiß der Layout-Manager nicht, wie groß Ihr Panel sein soll. Versuchen Sie, "getPreferredSize" zu überschreiben und geben Sie die gewünschte Größe an.Siehe meine aktualisierte Antwort. – tsolakp

+0

Hallo, ich habe das versucht und es scheint meine Lösung zu beheben. Ich danke dir sehr! – eyelikeboats

Verwandte Themen