Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163

    problema login caratteri textfield

    Ciao!
    riutilizzando questo codice abbiamo notato che la textfield txtUtente accetta solo caratteri numerici. Come si può risolvere questo problema facendo si che vengano accettati caratteri alfabetici?? aiuto!! VVoVe:

    codice:
      import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.sql.*;
    import java.net.URL;
    import java.net.MalformedURLException;
    import javax.swing.JApplet.*;
    
    public class Login3 extends JApplet
    {
    	JLabel labTitAccesso,labUtente,labPassword;
    	JTextField txtUtente;
    	JPasswordField txtPassword;
    	JButton btnEntra;
    	JPanel panCentrale,panTitolo,panUtente,panPassword,panPulsanti;
    
    	private Connection connessione;
    
    	public void init()
    	{
    	setSize(400,400);
    	setBackground( Color.black);
    	try {
    	// Inizia connessione con il database
    	Class.forName("com.mysql.jdbc.Driver");
    	connessione=DriverManager.getConnection("jdbc:mysql://localhost:3306/schedule" , "root","root");
    	}
    	catch (ClassNotFoundException cnfex) {
    	//processo ClassNotFoundExceptions qui
    	System.err.println("Caricamento di driver JDBC/ODBC non riuscito");
    	cnfex.printStackTrace();
    	System.exit(1);
    	}
    	catch (SQLException sqlex) {
    	//processo SQLExceptions qui
    	System.err.println("Non è possibile completare la connessione");
    	sqlex.printStackTrace();
    	}
    
    	panCentrale=new JPanel();
    	panTitolo=new JPanel();
    	panUtente=new JPanel();
    	panPassword=new JPanel();
    	panPulsanti=new JPanel();
    
    	// imposto i layout dei pannelli
    	setLayout(new BorderLayout());
    	panCentrale.setLayout(new BoxLayout(panCentrale, BoxLayout.Y_AXIS));
    	panUtente = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 10));
    	panPassword = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 10));
    	panPulsanti = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 10));
    
    	// definizioni delle etichette
    	labTitAccesso=new JLabel("Accesso Utenti",SwingConstants.CENTER);
    	labUtente=new JLabel("Utente",SwingConstants.CENTER);
    	labPassword=new JLabel("Password",SwingConstants.CENTER);
    
    	// definizioni dei campi di testo
    	txtUtente=new JTextField(10);
    	// questo campo accetterà solo numeri e il pulsante
    	txtUtente.addKeyListener(new KeyAdapter()
    	{
    	public void keyTyped(KeyEvent e)
    	{
    	char caracter = e.getKeyChar();
    	if(((caracter <'0') ||(caracter> '9')) &&(caracter != KeyEvent.VK_BACK_SPACE))
    	{
    	e.consume();
    	}
    	}
    	});
    	txtPassword=new JPasswordField(10);
    
    	// definizione del pulsante
    	btnEntra=new JButton("Entra");
    	// collego questo pulsante al metodo Login
    	btnEntra.addActionListener(new ActionListener() {
    	public void actionPerformed(ActionEvent e) {
    	Login(e);
    	}
    	});
    
    	// inserimento degli elementi Swing ai pannelli
    	panTitolo.add(labTitAccesso);
    	panUtente.add(labUtente);
    	panUtente.add(txtUtente);
    	panPassword.add(labPassword);
    	panPassword.add(txtPassword);
    	panPulsanti.add(btnEntra);
    
    	//inserimento dei pannelli al pannello centrale
    	panCentrale.add(panTitolo);
    	panCentrale.add(panUtente);
    	panCentrale.add(panPassword);
    	panCentrale.add(panPulsanti);
    
    	add(panCentrale,BorderLayout.CENTER);
    
    	}
    
    	// metodo collegato al pulsante btnEntra
    	public void Login(ActionEvent e)
    	{
    
    	try {
    	if(!txtUtente.getText().equals("") && !txtPassword.getText().equals(""))
    	{
    	Statement statement =connessione.createStatement();
    	// query che usa i dati dei campi Codice e Password della tabella Utenti
    	String query="SELECT Cognome,Password FROM Utente_docente WHERE Cognome="+ txtUtente.getText()+
    	" AND Password='"+txtPassword.getText()+"'";
    	// stampa della stringa della query
    	System.out.println("\nInviando query: "+connessione.nativeSQL(query)+"\n");
    
    	ResultSet resultset=statement.executeQuery(query);
    	display(resultset);
    	statement.close();
    	}
    	else if(txtUtente.getText().equals("") && !txtPassword.getText().equals(""))
    	{
    	JOptionPane.showMessageDialog(null, "Inserisca Nome Utente","Login", JOptionPane.ERROR_MESSAGE);
    	}
    	else if(!txtUtente.getText().equals("") && txtPassword.getText().equals(""))
    	{
    	JOptionPane.showMessageDialog(null, "Inserisca Password","Login", JOptionPane.ERROR_MESSAGE);
    	}
    	else
    	{ JOptionPane.showMessageDialog(null, "Inserisca Nome Utente e Password","Login", JOptionPane.ERROR_MESSAGE);}
    	}
    	// cattura eventuali errori ed eccezioni nella richiesta de la query
    	catch(SQLException sqlex) {
    	sqlex.printStackTrace();
    	}
    	}
    
    	public void display(ResultSet resultset)
    	{
    	String urlString="Programma.html";
    	URL url = null;
    
    	try
    	{
    	if(resultset.next())
    	{
    	// Carica il file Programma.html nella stessa pagina dell'applet
    	url = new URL(getDocumentBase(),urlString);
    	getAppletContext().showDocument(url);
    	JOptionPane.showMessageDialog(null, "Utente loggato" ,"Login", JOptionPane.INFORMATION_MESSAGE);
    	}
    	else
    	{JOptionPane.showMessageDialog(null, "Riprovare","Login", JOptionPane.ERROR_MESSAGE);
    	return; }
    	}
    	catch (MalformedURLException e) {
    	System.err.println("Malformed URL: " + urlString);
    	}
    	catch (SQLException sqlex)
    	{
    	sqlex.printStackTrace();
    	}
    	}
    
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: problema login caratteri textfield

    Originariamente inviato da 1sirena
    abbiamo notato che la textfield txtUtente accetta solo caratteri numerici.
    A quel componente è stato aggiunto un KeyListener, che ha lo scopo di "consumare" i caratteri che non sono digit o backspace. Tra l'altro realizzare un filtro del genere tramite un KeyListener è molto, come si dice .... all' "acqua di rose"... cioè non è proprio il massimo. Già un "incolla" sul componente lo bypassa. Per fare dei filtri più completi ed efficaci ci sono altre soluzioni.

    Se ti va bene l'uso di un KeyListener, basta che modifichi la condizione di filtro in keyTyped().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163
    grazie per averci risposto!!

    è da poco che studiamo il linguaggio java... Potresti fare un esempio su come modificare il codice in modo tale che non legga più solo caratteri numerici?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da 1sirena
    è da poco che studiamo il linguaggio java... Potresti fare un esempio su come modificare il codice in modo tale che non legga più solo caratteri numerici?
    Nel codice, come puoi vedere, c'è un if:

    codice:
    if(((caracter <'0') ||(caracter> '9')) &&(caracter != KeyEvent.VK_BACK_SPACE))
    {
        e.consume();
    }
    Che tradotto a parole: se il carattere è fuori dal range 0...9 e non è un backspace, consumalo.

    Basta che cambi il test.

    E tra l'altro ci sono parentesi superflue. Gli operatori < > hanno priorità maggiore di || e pure != ha priorità maggiore di &&.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163
    ho provato a modificare il codice in questo modo:


    if(((caracter <'a') ||(caracter> 'z'))&&((caracter<'A')||(caracter>'Z'))&&(caracter != KeyEvent.VK_BACK_SPACE))
    {
    e.consume();
    }

    ma mi da errore!! cosa ho sbagliato??

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    codice:
    if (!isLetter (caracter) && caracter != KeyEvent.VK_BACK_SPACE)
    {
        ....
    }
    
    
    ...
    
    private static boolean isLetter (char c)
    {
        return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163
    Grazie!! ora funziona!

    ho un altro problema la login è realizzata utilizzando una java applet come posso fare per riutilizzare il codice in una java application??

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da 1sirena
    ho un altro problema la login è realizzata utilizzando una java applet come posso fare per riutilizzare il codice in una java application??
    Beh, dipende appunto da cosa/quanto vuoi riutilizzare. Nel tuo codice iniziale hai messo tutto quanto (gestione interfaccia utente, gestione db, ecc...) in una unica classe che estende JApplet. Chiaramente non è proprio quello che si dice "riutilizzabile".

    Sta quindi a te cercare di scrivere più classi che siano facilmente riutilizzabili, cercando di separare bene i compiti e slegare il più possibile la gestione della interfaccia utente da quella relativa al db.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.