Boa tarde gente, estou tentando fazer um exercício do Deitel sobre GUI, se alguém tiver o livro, é a página 627, exercício 14.14. Então, pra quem não tiver o exercício é o seguinte, tenho que gerar um número inteiro aleatório entre 1 e 1000 e o usuário deve tentar advinhar o número, se o número for abaixo do gerado, a tela do GUI deve ficar azul e a mensagem, “too low” deve ser exibida, se for maior que o número gerado a tela do GUI deve mudar para vermelhor e o número a mensagem “too high” deve ser exibida. Eu fiz assim:
package Exercícios;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class GuessNumber extends JFrame{
private JTextField textField;
private JLabel label;
private JLabel helpLabel;
private int number;
private JPanel panel;
private BorderLayout layout;
private JButton button;
public GuessNumber(){
super("Can you guess the number?");
layout = new BorderLayout();
setLayout(layout);
label = new JLabel("I Have a number between 1 and 1000. Can you guess my "
+ "number? \n");
helpLabel = new JLabel("Hello");
button = new JButton("Again ?");
buttonHandler b = new buttonHandler();
button.addActionListener(b);
textField = new JTextField();
textFieldHandler handler = new textFieldHandler();
textField.addActionListener(handler);
panel = new JPanel();
panel.setLayout(new GridLayout(1,2));
panel.add(textField);
panel.add(helpLabel);
add(label,BorderLayout.NORTH);
add(panel,BorderLayout.CENTER);
add(button,BorderLayout.SOUTH);
}
public class textFieldHandler implements ActionListener{
int translator = -1;
String aux;
@Override
public void actionPerformed(ActionEvent e){
number = (int)(Math.random() * 1000 + 1);
while(translator != number)
{
aux = textField.getText();
translator = Integer.parseInt(aux);
if(translator < number)
{
getContentPane().setBackground(Color.BLUE);
helpLabel.setText("Too Low.");
}
else
{
if(translator > number)
{
getContentPane().setBackground(Color.RED);
helpLabel.setText("Too High.");
}
else
{
helpLabel.setText("Correct!");
textField.setEditable(false);
break;
}
}
}
}
}
private class buttonHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
textFieldHandler t = new textFieldHandler();
textField.setEditable(true);
textField.addActionListener(t);
}
}
}
e a main:
package Exercícios;
import javax.swing.JFrame;
public class GuessNumberTest {
public static void main(String[] main){
GuessNumber g = new GuessNumber();
g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
g.setSize(400,100);
g.setVisible(true);
}
}
é estranho porque nem mesmo essa parte "g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); "está funcionando, porque quando eu aperto o X da janela para fechar, a janela não fecha, só se eu interromper mesmo o programa que fecha. Então, o GUI é gerado tudo bonitinho , o prompt fica no JTextField certinho mas, quando eu digito o primeiro inteiro teclo Enter, o GUI pára de responder, o backgorund não muda de cor e nem o JLabel muda o conteúdo, alguém sabe dizer por que isso?