2016-05-08 12 views
1

Ich versuche, die folgende Klasse als Schläger für ein einfaches pinpong SpielJLabel zeigt, die nicht in Rahmen

public class Racket extends JLabel{ 
     int up, down; 
     int x, y; 

     public Racket(int up, int down, int x, int y){ 
      this.setBackground(Color.BLACK); 
      this.setForeground(Color.BLACK); 
      this.up = up; 
      this.down = down; 
      this.x = x; 
      this.y = y; 
      setLocation(x,y); 
      setOpaque(true); 
     } 
    } 

zu verwenden, wenn ich den Schläger auf den Hauptrahmen über

p1 = new Racket(KeyEvent.VK_W, KeyEvent.VK_S, 0, (windowSize.height/2)-10); 
window.add(p1); 

hinzufügen die Schläger taucht nicht auf, könnte jemand darauf hinweisen, was los ist?

Der Behälter ist nur ein einfaches JFrame ohne Layout-Manager

window = new JFrame("Ping Pong"); 
window.setSize(500, 500); 
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
window.setLayout(null); 
+0

Sie brauchen Ihre x/y-Variablen nicht. Verwenden Sie einfach die setLocation() -Methode direkt, wenn Sie den Ort des Schlägers ändern möchten. – camickr

Antwort

2

Und es ist Ihr Problem:

window.setLayout(null); 

Wenn Sie null Layouts verwenden, sind Sie voll verantwortlich für das komplette Layout, einschließlich der Größe und Position aller hinzugefügten Komponenten, und in Ihrem Code, während Sie den Standort von JLabel festlegen, legen Sie nicht die Größe fest. Die richtige Lösung besteht nicht darin, die Größe festzulegen, sondern die Verwendung von Null-Layouts zu vermeiden. Während Null-Layouts und setBounds() Swing-Neulinge wie die einfachste und beste Möglichkeit erscheinen, komplexe GUI's zu erstellen, erzeugen Sie mit der Swing GUI'S die ernsteren Schwierigkeiten, denen Sie begegnen werden, wenn Sie sie benutzen. Sie werden die Größe Ihrer Komponenten nicht ändern, wenn die GUI die Größe ändert, sie sind eine royale Hexe, die verbessert oder beibehalten wird, sie scheitern komplett, wenn sie in Scrollpanels platziert werden. Sie sehen auf allen Plattformen oder Bildschirmauflösungen, die sich vom Original unterscheiden, grässlich aus .

+0

Da dies für ein "Ping Pong" Spiel ist, das zufällige Bewegung eines Schlägers (auf und ab) hat. Ich habe kein Problem mit der Verwendung des Null-Layouts. Aber Sie müssen die Größe Ihres Rackets im Konstruktor festlegen, indem Sie die Methode 'setSize()' verwenden. – camickr

+0

Das war in der Tat das Problem, vielen Dank für die Hilfe! – gabevt