Reputation: 81
so below is my code for this game i am makeing. its a number guessing game. anyway my main question is how do i make the contents of the gamePanel so that when you resize the screen the components are still in the centre. and so if the screen gets bunched up smaller then the components move automatically to be squashed in and seen still in the panel.
i have been trying to figure this out for ages.
public class GameScreen {
public static void main(String[] args) {
final JFrame game;
final JButton playButton, guessButton;
final JPanel topPanel, gamePanel, rangePanel, guessPanel;
final JTextArea gameStatus;
final GuessingGame gameNumbers;
game = new JFrame();
gameNumbers = new GuessingGame();
game.setTitle("Guessing Game");
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel playerLabel = new JLabel("Player: ");
JLabel guessLabel = new JLabel("Guess: ");
final JLabel rangeLabel = new JLabel("Range: ");
final JTextField playerName = new JTextField("", 20);
final JTextField guessInput = new JTextField("", 20);
playButton = new JButton("Play");
guessButton = new JButton("Guess");
topPanel = new JPanel();
gamePanel = new JPanel();
rangePanel = new JPanel(new BorderLayout());
guessPanel = new JPanel(new FlowLayout());
CountDownProgressBar countDownPanel = new CountDownProgressBar();
gameStatus = new JTextArea(10, 20);
JScrollPane scroll = new JScrollPane(gameStatus);
game.add(topPanel, BorderLayout.NORTH);
game.add(scroll, BorderLayout.EAST);
game.add(gamePanel, BorderLayout.WEST);
game.add(countDownPanel, BorderLayout.SOUTH);
gamePanel.add(rangePanel);
gamePanel.add(guessPanel);
topPanel.setBackground(Color.yellow);
topPanel.add(playerLabel);
topPanel.add(playerName);
topPanel.add(playButton);
rangePanel.add(rangeLabel);
guessPanel.add(guessLabel);
guessPanel.add(guessInput);
guessPanel.add(guessButton);
gameStatus.setFocusable(false);
guessButton.setEnabled(false);
guessInput.setEnabled(false);
playButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (playerName.getText().equals("")) {
JOptionPane.showMessageDialog(gamePanel, "Invalid Player Name");
} else {
gameNumbers.play();
gameStatus.append("Game Started!\n");
rangeLabel.setText(gameNumbers.toString());
guessButton.setEnabled(true);
guessInput.setEnabled(true);
playButton.setEnabled(false);
playerName.setEnabled(false);
}
}
});
guessButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int playerGuess = Integer.parseInt(guessInput.getText());
if (gameNumbers.isGuessCorrect(playerGuess)) {
gameStatus.append("Game Over!\n");
guessButton.setEnabled(false);
guessInput.setEnabled(false);
playButton.setEnabled(true);
playerName.setEnabled(true);
JOptionPane.showMessageDialog(gamePanel, "" + playerName.getText() + " wins!");
} if (gameNumbers.isGuessAlmostCorrect(playerGuess)) {
gameStatus.append("very close!\n");
guessInput.requestFocus();
} if (gameNumbers.isGuessLarger(playerGuess)) {
gameStatus.append("try something smaller...\n");
guessInput.requestFocus();
} if (gameNumbers.isGuessSmaller(playerGuess)) {
gameStatus.append("try something larger...\n");
guessInput.requestFocus();
}
}
});
game.pack();
game.setVisible(true);
}
}
Upvotes: 1
Views: 160
Reputation: 347184
There's a lot missing, but, if I read this right, change the layout manager for the gamePanel
to something like GridBagLayout
(gamePanel = new JPanel(new GridBagLayout())
) and add it to the center position of your game
panel (game.add(gamePanel, BorderLayout.CENTER)
).
Upvotes: 2