JPanel und JButton verschieben?
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.event.*;
public class Engine extends Thread {
public JFrame frame = new JFrame("drawWorld");
public JPanel panel;
public JButton startGame = new JButton("START");
public JLabel highscore = new JLabel("HIGHSCORE: ");
public JLabel score = new JLabel("CURRENT SCORE: ");
public int shift = 0;
public int bounce = 0;
public Player player;
public Engine(Player pPlayer) {
frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
this.player = pPlayer;
}
public void startdraw(List blocks) {
panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
List<Block> world = blocks.copy(); //Kopiert das Listenobjekt, damit es nicht zu einem doppeltem Zugriff kommt
super.paintComponent(g);
BufferedImage buffer = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics bufferGraphics = buffer.getGraphics();
player.isUpdating = true;
if (player.dead == false) {
bufferGraphics.drawImage(player.texture, (int)frame.getWidth() / 2 - 75, (int)frame.getHeight() / 2, 150, 150, null);
world.toFirst();
while (world.getContent() != null) {
Block currentDrawing = (Block)world.getContent();
if (currentDrawing != null) {
bufferGraphics.drawImage(currentDrawing.texture, (int)currentDrawing.x*100 - shift + ((int)frame.getWidth() - 1000) / 2 - 350, (int)currentDrawing.y*100 + bounce + 45 + ((int)frame.getHeight() - 1000) / 2, (int)100, (int)100, null);
}
world.next();
}
}
score.setText("CURRENT SCORE: " + player.world.score);
highscore.setText("HIGHSCORE: " + player.world.highscore);
g.drawImage(buffer, 0, 0, null);
player.isUpdating = false;
}
};
startGame.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
player.reset();
player.dead = false;
panel.remove(startGame);
frame.requestFocusInWindow();
frame.repaint();
}
});
frame.add(panel);
panel.add(this.highscore);
panel.add(this.score);
if (player.dead) {
panel.add(this.startGame);
}
frame.setVisible(true);
}
public void update() {
frame.repaint();
}
}
Hallo Leute,
ich habe mich gefragt, wie ich die Objekte this.highscore, this.score und this.startGame verschieben kann. Ich habe schon mehrere Möglichkeiten ausprobiert. setBounds, setHorizontal / VerticalAlignment haben nicht funktioniert. Woran liegt das?
Danke im Vorraus!
1 Antwort
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Programmiersprache
Um die Platzierung kümmert sich ein LayoutManager, wenn du keinen angibst das FlowLayout.
Willst du bei der Anordnung flexibler sein, musst du einen passenden LayoutManager auswählen.
https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html