Ich bin neu in Java und arbeite gerade an einem Spiel. Im Wesentlichen gibt es aufsteigende Blasen, und der Benutzer muss sie platzen lassen, indem er die Maus über sie bewegt.Ein transparentes JPanel über einen JFrame machen
Ich habe bereits eine Animation auf dem JFrame gemacht und ich muss ein JPanel für einen MouseMotionListener oben hinzufügen. Wenn ich jedoch das JPanel über dem JFrame hinzufüge (selbst wenn setOpaque auf false gesetzt ist), kann ich meine Animation darunter nicht sehen. Sie können meinen Code unten sehen. Wenn Sie Codierungsfehler finden, lassen Sie es mich wissen.
Ich habe zwei Lösungen im Hinterkopf, entweder in JPanel animieren (was ich nicht weiß, wie zu tun), oder JPanel transparent machen.
Spielklasse:
public class Game extends JPanel{
public static final int WINDOW_WIDTH = 600;
public static final int WINDOW_HEIGHT = 400;
private boolean insideCircle = false;
private static boolean ifPaused = false;
private static JPanel mainPanel;
private static JLabel statusbar;
private static int clicks = 0;
//Creates a Bubbles object Array
Bubbles[] BubblesArray = new Bubbles[5];
public Game() {
//initializes bubble objects
for (int i = 0; i < BubblesArray.length; i++)
BubblesArray[i] = new Bubbles();
}
public void paint(Graphics graphics) {
//makes background white
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);
//paints square objects to the screen
for (Bubbles aBubblesArray : BubblesArray) {
aBubblesArray.paint(graphics);
}
}
public void update() {
//calls the Square class update method on the square objects
for (Bubbles aBubblesArray : BubblesArray) aBubblesArray.update();
}
public static void main(String[] args) throws InterruptedException {
statusbar = new JLabel("Default");
mainPanel = new JPanel();
mainPanel.setOpaque(false);
mainPanel.setBackground(new Color(0,0,0,0));
mainPanel.setVisible(true);
mainPanel.addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
statusbar.setText(String.format("Your mouse is at %d, %d", e.getX(), e.getY()));
}
public void mouseExited(MouseEvent e){
ifPaused = true;
}
public void mouseEntered(MouseEvent e){
ifPaused = false;
}
});
Game game = new Game();
JFrame frame = new JFrame();
frame.add(game);
frame.add(mainPanel);
frame.add(statusbar, BorderLayout.SOUTH);
frame.setVisible(true);
frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setTitle("Bubble Burst");
frame.setResizable(false);
frame.setLocationRelativeTo(null);
while (true) {
if (!ifPaused){
game.update();
game.repaint();
Thread.sleep(5);
}
}
}
}
Bevorzugen 'paintComponent' zu' paint', auch sicherstellen, dass Sie die Methoden Super Implementierung aufrufen (dh 'super.paint (Grafik) ') Die nächste Frage wäre, warum nicht den Zuhörer zum' Game' Panel hinzufügen? – MadProgrammer