techhy Posted June 17, 2012 at 05:58 PM Report Share #463496 Posted June 17, 2012 at 05:58 PM 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 More sharing options...
Rui Carlos Posted June 17, 2012 at 07:57 PM Report Share #463525 Posted June 17, 2012 at 07:57 PM Para números costumo usar algo como new JFormattedTextField(new MaskFormatter("######")). Neste caso, penso que iria obrigar à utilização de exactamente 6 dígitos, que me parece não ser bem o que pretendes. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
techhy Posted June 18, 2012 at 12:41 AM Author Report Share #463562 Posted June 18, 2012 at 12:41 AM Pois, não é o que pretendo.. é um campo nome :| Obrigado na mesma! Link to comment Share on other sites More sharing options...
Rui Carlos Posted June 18, 2012 at 01:45 AM Report Share #463563 Posted June 18, 2012 at 01:45 AM Dei um exemplo para números. Também consegues limitar a letras. O problema é que, tanto quanto sei, o MaskFormatter é para um número de caracteres fixo. Não me parece que dê para o que queres. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
techhy Posted June 18, 2012 at 02:12 AM Author Report Share #463564 Posted June 18, 2012 at 02:12 AM 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 More sharing options...
Rui Carlos Posted June 18, 2012 at 02:18 AM Report Share #463565 Posted June 18, 2012 at 02:18 AM Tens a certeza que estás a usar o textfield correcto? É que ainda agora testei uma aplicação que tenho aqui, e isso estava a funcionar (para datas, com o formato ##-##-####). Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
techhy Posted June 18, 2012 at 02:27 AM Author Report Share #463566 Posted June 18, 2012 at 02:27 AM 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 More sharing options...
techhy Posted June 18, 2012 at 02:51 AM Author Report Share #463568 Posted June 18, 2012 at 02:51 AM A não ser que não esteja a associar ao jTextField6, eu apenas o fiz por baixo de onde guardo o conteúdo. Em baixo de : pst.setString(5, jTextField6.getText()); E não consigo colocar o jTextField6 à expressão do MaskFormatter.. Link to comment Share on other sites More sharing options...
Rui Carlos Posted June 18, 2012 at 02:13 PM Report Share #463652 Posted June 18, 2012 at 02:13 PM 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("#########")); Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
techhy Posted June 18, 2012 at 05:32 PM Author Report Share #463760 Posted June 18, 2012 at 05:32 PM (edited) 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 June 18, 2012 at 05:39 PM by Baderous geshi Link to comment Share on other sites More sharing options...
Rui Carlos Posted June 18, 2012 at 08:36 PM Report Share #463824 Posted June 18, 2012 at 08:36 PM 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. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
joelbrito Posted June 18, 2012 at 08:47 PM Report Share #463828 Posted June 18, 2012 at 08:47 PM 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 More sharing options...
techhy Posted June 19, 2012 at 04:30 PM Author Report Share #464125 Posted June 19, 2012 at 04:30 PM Pois, não estava a colocar nada no initcomponents.. Logo quando chegar a casa, vou testar! Link to comment Share on other sites More sharing options...
joelbrito Posted June 19, 2012 at 05:32 PM Report Share #464149 Posted June 19, 2012 at 05:32 PM 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 More sharing options...
Rui Carlos Posted June 19, 2012 at 05:52 PM Report Share #464165 Posted June 19, 2012 at 05:52 PM 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. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
techhy Posted June 19, 2012 at 11:55 PM Author Report Share #464281 Posted June 19, 2012 at 11:55 PM 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 More sharing options...
joelbrito Posted June 20, 2012 at 12:12 AM Report Share #464283 Posted June 20, 2012 at 12:12 AM 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 More sharing options...
techhy Posted June 20, 2012 at 12:47 AM Author Report Share #464285 Posted June 20, 2012 at 12:47 AM Pois, experimentei a meter agora os 15caracteres porque tenho "AAAAAAAAAAAAAAA" e já não se apaga sozinho.. Onde queria o espaço é no campo nome por isso é muito relativo o local onde coloco o espaço. obrigado!! Link to comment Share on other sites More sharing options...
Rui Carlos Posted June 20, 2012 at 01:09 AM Report Share #464287 Posted June 20, 2012 at 01:09 AM Penso que isso é o problema que já te referi: com esse formato, obrigas a que o campo tenha um número fixo de caracteres. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
techhy Posted June 20, 2012 at 11:40 PM Author Report Share #464500 Posted June 20, 2012 at 11:40 PM Pois, optei por colocar apenas essa com uma jTextField normal, sem qualquer máscara. Um obrigadão aos 2, ajudaram imenso! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now