Jump to content

jTextField apenas deve aceitar letras


techhy

Recommended Posts

Boas. Estou a realizar um trabalho e há um local que apenas pode ser possível inserir letras e outro, que apenas pode inserir números. Acredito que sabendo fazer um, sei fazer o outro e neste momento estou a tentar limitar a jTextField apenas a letras. Segue o código:

public MaskFormatter setMascara(String mascara) {
      MaskFormatter mask = null;
      try {
         mask = new MaskFormatter(mascara);
      } catch (ParseException e) {
          JOptionPane.showMessageDialog(null, "Nada" + e.getMessage());
      }
      return mask;
   }

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
.........
pst.setString(3, jTextField4.getText());
jTextField4 = new JFormattedTextField(setMascara("UUUUUUUUU"));
if(jTextField4.getText().length() < 6){ //isto é só para ter no mínimo 6 carateres, nem interessa para a dúvida
   JOptionPane.showMessageDialog(null, "O campo nome deve conter mais que 5 carateres.");
} else {
..............
}

O que acontece, é que continuo a poder inserir tudo 😕

Já procurei muita coisa no Goog mas não percebo nada daqueles códigos gigantes em que também nada é explicado...

Alguém poderá dar uma mãozinha?

Cumprimentos.

Link to comment
Share on other sites

Nesse caso, irei precisar para o campo telefone, tentei assim:

pst.setString(5, jTextField6.getText());
     try {
           JFormattedTextField jFormattedTextField = new JFormattedTextField(new MaskFormatter("#########"));
     } catch (ParseException ex) {
             Logger.getLogger(novoutilizador.class.getName()).log(Level.SEVERE, null, ex.getMessage());
     }

No entanto dá para colocar mais que os 9 caracteres e dá para letras e números na mesma, como se não estivesse a fazer nada.

Onde errei?

Obrigadão!

Link to comment
Share on other sites

Sim, implementei nos dois campos que tenho que só quero com 9 números seguidos e consigo colocar o que quero.

Quando coloco letras: "Data truncated for column 'NIF' at row 1";

Quando coloco mais que 9 caracteres: "Incorrect integer value: 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' for column 'NIF' at row 1"

Tens a certeza que ao início do try, está correto? Fiz como disseste inicialmente, mas o próprio java mandou-me alterar para aquela maneira que já apresentei anteriormente.

Link to comment
Share on other sites

A única coisa que estás a fazer é a criar um novo textfield, diferente do jTextField6. Parece-me que o teu problema é que não definiste o jTextFiled6 como um FormattedTextField logo à partida.

Na inicialização dos componentes, devias ter

jTextField6 = new JFormattedTextField(new MaskFormatter("#########"));
Link to comment
Share on other sites

Não percebi isso de "na inicialização dos componentes". Eu apenas tenho no botão "Criar" isto:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {										

 if(jTextField1.getText().equals("")) {
	 JOptionPane.showMessageDialog(null, "Preencha todos os campos");
 } else {

 try{
	 Class.forName("com.mysql.jdbc.Driver"); //procura classe no projeto

	 Connection con; //cria variável
	 con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/javaprog","root","123");
	 if(jPasswordField1.getText().equals(jPasswordField2.getText())){
		 String query = "INSERT INTO utilizador (IDlogin, Designacao, Nome, Morada, NIF, telefone, Password) VALUES (?,?,?,?,?,?,?)";
		 PreparedStatement stmt = (PreparedStatement) con.prepareStatement(query); //o comando
		 stmt.setString(1, jTextField1.getText());
		 if (jTextField1.getText().length() > 15 || jTextField1.getText().length() <6) {
			 JOptionPane.showMessageDialog(null, "A identificação deve conter entre 6 e 15 caracteres.");
		 } else {
		 stmt.setString(7, jPasswordField1.getText());
		 if (jPasswordField1.getText().length() > 15 || jPasswordField1.getText().length() <6) {
			 JOptionPane.showMessageDialog(null, "A password deve conter entre 6 e 15 caracteres.");
		 } else {
		 stmt.setString(3, jTextField4.getText());
		 if(jTextField4.getText().length() < 6){
			 JOptionPane.showMessageDialog(null, "O campo nome deve conter mais que 5 carateres.");
		 } else {
		 stmt.setString(4, jTextField5.getText());



		 stmt.setString(5, jTextField6.getText());
						 try {
							 jTextField6 = new JFormattedTextField(new MaskFormatter("#########"));
			 //			 if(jTextField6.getText().length() > 9 || jTextField6.getText().length() < 9){
			 //			 } else {
			 //			 } else {
						 } catch (ParseException ex) {
							 Logger.getLogger(novoutilizador.class.getName()).log(Level.SEVERE, null, ex);
						 }


			 //AQUI


		 stmt.setString(6, jTextField2.getText());
		 try {
							 JFormattedTextField jFormattedTextField = new JFormattedTextField(new MaskFormatter("#########"));
						 } catch (ParseException ex) {
							 Logger.getLogger(novoutilizador.class.getName()).log(Level.SEVERE, null, ex.getMessage());
						 }





//			 if (jTextField2.getText().length() > 9 || jTextField2.getText().length() <9) {
//				 JOptionPane.showMessageDialog(null, "O campo telefone deve conter 9 caracteres.");
//			 } else {

		 jComboBox1.getSelectedItem();
		 String value=jComboBox1.getSelectedItem().toString();
		 stmt.setString(2, value);

		 stmt.executeUpdate();
		 JOptionPane.showMessageDialog(null, "Novo utilizador inserido.", "Criação de novo utilizador", JOptionPane.INFORMATION_MESSAGE); //1º centrar;
			 }}}}else{
		 JOptionPane.showMessageDialog(null,"As passwords não correspondem.", "", JOptionPane.ERROR_MESSAGE);
	 }
 }catch (ClassNotFoundException ex) {
	 System.out.println("Não foi possível encontrar a classe: " + ex.getMessage());
 } catch (SQLException e) {
	 System.out.println("Ocorreu um erro de SQL: " + e.getMessage());
 }



}									
}

Coloquei com espaços o que estou a tentar editar. Está mal posicionado? O que aquelas expressões fazem é receber o valor dos campos para ir guardar na bd mysql.

Tentei exatamente como disseste, como podes ver no código, e continua.. 😕

Cumprimentos.

Edited by Baderous
geshi
Link to comment
Share on other sites

O jButton1ActionPerformed é executado logo no início, i.e., quando a janela é aberta?

Se estiveres a usar o NetBeans para desenhar a GUI, deves ter aí um método initComponents, e é lá que deves usar a linha de código que te indiquei. A linha tem que ser executada ao abrir a janela (ou pelo menos antes de começares a escrever no campo), caso contrário não terá efeito nenhum.

Link to comment
Share on other sites

O jButton1ActionPerformed é executado ao clicar no botão.

Ao desenhar o GUI no netbeans tens que colocar um FormattedTextField em vez do texField.

Depois nas propriedades do textfield podes definir a máscara em formatterFactory, ou então podes inserir a máscara através do menu CostumizeCode do FormattedtextField (botão direito do rato).

Engenharia de Sistemas Informáticos @ IPCA

"Estou convencido de que cerca de metade do que separa os empreendedores de sucesso daqueles malsucedidos é a pura perseverança." - Steve Jobs

Link to comment
Share on other sites

Pois, não estava a colocar nada no initcomponents.. Logo quando chegar a casa, vou testar!

O netbeans não te deixa alterar nada no método initcomponents().

Para isso tens que fazer como eu disse no post acima, o CostumizeCode...

Engenharia de Sistemas Informáticos @ IPCA

"Estou convencido de que cerca de metade do que separa os empreendedores de sucesso daqueles malsucedidos é a pura perseverança." - Steve Jobs

Link to comment
Share on other sites

O netbeans não te deixa alterar nada no método initcomponents().

Para isso tens que fazer como eu disse no post acima, o CostumizeCode...

Num projecto que aqui tenho, penso que usei o Post-Init Code (que basicamente altera o initComponents). Mas a tua sugestão do formatterFactory deve ser a mais indicada no caso.

Link to comment
Share on other sites

Fiz como o joelbrito disse e está a funcionar! Só estou com uma dúvida no que inserir na máscara para conseguir ter letras e espaços, visto que o espaço dá erro como se de um número se tratasse.

Está a acontecer uma coisa muito estranha, quando eu escrevo nos campos que coloquei como jFormattedTextField, ao ir para o próximo, o que lá estava dentro apaga-se sozinho. 😕

Muito obrigado aos dois!!!

Link to comment
Share on other sites

Quando se apaga sozinho é porque o que está escrito não é válido.

Experimenta a máscara "?? ??", por exemplo. Ao escrever "aaaa" fica "aa aa".

Ou para o caso dos números "## ##". "1234" fica "12 34"

Isto se o espaço tiver uma posição fixa. Se não tiver não sei como faze-lo.... Só perguntando ao meu amigo Google 🙂

Engenharia de Sistemas Informáticos @ IPCA

"Estou convencido de que cerca de metade do que separa os empreendedores de sucesso daqueles malsucedidos é a pura perseverança." - Steve Jobs

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.