Help needed with sizing components
I have completed most of the application I created however I cannot get the GUI components to show up correctly. I want to have the text in JLabel on the top centered in the form. The 2nd component is a JTextField which will only need to be big enough to hold numbers between 1 and 100. It currently takes up the whole width of the form. I have tried a number of things to resize it without success. The 3rd component is a button panel which actually appearing correctly.
Code:
import javax.swing.*;
import java.awt.*;
public class GuessNumber {
public static void main(String[] args) {
Guess guess = new Guess();
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(guess.getContent());
f.setSize(500, 150);
f.setVisible(true);
f.setLocation(275, 275);
}
}
Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.*;
import java.awt.*;
public class Guess implements ActionListener{
JButton okButton;
JButton playAgainButton;
JButton exitButton;
JTextField answerTextField;
JLabel msgLabel;
int randomNum;
int currentMessageState = 1;
int guessCount = 1;
public JPanel getContent() {
RandomNumber random = new RandomNumber();
randomNum = random.getNumber();
System.out.println(randomNum);
String message = "Please enter what you think the random number is below.";
// creates JLabel that asks user to guess what the random
// number is and enter it below
msgLabel = new JLabel(message, JLabel.CENTER);
msgLabel.setSize(400, 150);
msgLabel.setFont(new Font("Times New Roman", Font.BOLD, 14));
answerTextField = new JTextField();
Dimension d = answerTextField.getPreferredSize();
d.width = 75;
answerTextField.setPreferredSize(d);
answerTextField.setFont(new Font("Times New Roman", Font.PLAIN, 14));
answerTextField.requestFocusInWindow();
okButton = new JButton("Ok");
okButton.setSize(30, 30);
okButton.setFont(new Font("Times New Roman", Font.PLAIN, 14));
okButton.addActionListener(this);
playAgainButton = new JButton("Play Again");
playAgainButton.setFont(new Font("Times New Roman", Font.PLAIN, 14));
playAgainButton.addActionListener(this);
exitButton = new JButton("Exit");
exitButton.setFont(new Font("Times New Roman", Font.PLAIN, 14));
exitButton.addActionListener(this);
JPanel buttonPanel = new JPanel();
buttonPanel.add(okButton);
buttonPanel.add(playAgainButton);
buttonPanel.add(exitButton);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
panel.add(msgLabel);
panel.add(answerTextField);
panel.add(buttonPanel);
return panel;
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == okButton){
String userGuess = answerTextField.getText();
int guess = Integer.parseInt(userGuess);
answerTextField.setEditable(false);
if(guess == randomNum){
JOptionPane.showMessageDialog(null, "You guessed correctly.\n" +
"Tries needed to guess correctly: " + guessCount + "\n");
guessCount++;
answerTextField.setEditable(false);
}
if(guess < randomNum){
JOptionPane.showMessageDialog(null, "The guess was too low, guess higher.");
guessCount++;
answerTextField.setEditable(true);
answerTextField.setText("");
answerTextField.requestFocusInWindow();
}
if(guess > randomNum){
JOptionPane.showMessageDialog(null, "The guess was too high, guess lower.");
guessCount++;
answerTextField.setEditable(true);
answerTextField.setText("");
answerTextField.requestFocusInWindow();
}
}
if(e.getSource() == playAgainButton){
answerTextField.setEditable(true);
answerTextField.setText("");
answerTextField.requestFocusInWindow();
guessCount = 1;
Guess newgame = new Guess();
newgame.getContent();
}
if(e.getSource() == exitButton){
System.exit(0);
}
}
}
Code:
import java.util.Random;
public class RandomNumber {
int randomNum;
public RandomNumber() {
}
public int getNumber() {
setNumber();
return randomNum;
}
private void setNumber(){
int max = 100;
Random random = new Random();
randomNum = random.nextInt(max +1);
}
}
Thanks