Ich arbeite derzeit an einem Java -Swing -Projekt über Codehs. Wir wurden angewiesen, ein kleines Spiel zu erstellen, das mindestens drei verschiedene Swingelemente verwendet (für mich sind es mehrere Etiketten, Rahmen, Schaltflächen und ein animiertes Panel). Insbesondere haben uns einige der häufigsten Workarounds, die ich gesehen habe, wie Cardlayout, LayeredPane, Jdialog oder InternalPane, nicht bei. Ich habe versucht, ein paar dieser aus einer Laune heraus zu implementieren, um dieses Rendernproblem ohne Erfolg zu lösen. src = "
https://i.static.net/kecsvrdb.png"/>
Die Absicht ist es, ein Spiel zu erstellen, bei dem ein Spieler alle vier grünen Jbuttons Grey drehen muss, indem sie auf sie klicken, um einen Boxenstopp zu vervollständigen. Mein aktueller Ansatz dafür ist es, eine JLayeredPane im großen JFRame zu verwenden und dann meine benutzerdefinierte JPanel -Unterklasse unter den JPanels zu rendern, die die Tasten halten: < /p>
Code: Select all
windowLayer.setSize(450, 390);
windowLayer.add(animation, JLayeredPane.DEFAULT_LAYER);
windowLayer.setOpaque(false);
windowLayer.add(backRight, JLayeredPane.PALETTE_LAYER);
backRight.add(new Tire());
backRight.setLocation(300, 175);
backRight.setSize(50, 25);
backRight.setOpaque(false);
backRight.setVisible(true);
< /code>
Dies erzeugt die vier Schaltflächen, zeigt aber nicht das Animationsfeld an. Umgekehrt bestand meine ursprüngliche Methode darin, mehr JFRames als Container zu verwenden und sie oben auf dem Fenster
JFrame zu verschieben. Dies führte jedoch dazu, dass nur die Animation angezeigt wurde, ob ich setvisible (true) verwendet habe oder nicht. Verwende ich die Schichten in der JLayeredPane, oder? Bin ich überhaupt der richtigen Lösung? Kann ich dies mit so etwas wie einem BorderLayout fudigen, in dem ich jeweils zwei Tasten im Norden und Süden und die Animation durch die Mitte stelle? Oder gibt es einen Rendering -Trick, den ich verwenden kann, um die ursprüngliche Idee zu produzieren, ohne den grundlegenden Schwung zu erreichen, den wir bisher gelernt haben?