Gestione eventi su JtextField Non funziona

di il
5 risposte

Gestione eventi su JtextField Non funziona

Ho una form di login in cui devo gestire degli eventi in base al contenuto inserito dall'utente.
Ho messo nel codice la gestione eventi associata alla jtextfiled della username.
Ovviamente non funziona.

Vi chiederei un chiarimento anche perchè il codice messo è stato raffa<<olato andando a vedere esempi in internet.
Possibilmente se potete commentarli perchè questa parte del codice java mi è ancora molto oscuro.

Grazie

Moreno

PS vi prego di non sorridere e di portare pazienza, ma sono alle prime fasi dell'education , nonostante tutti i miei sforzi,
comprendo di fare delle vere porcherie dal punto di vista sintattico.
grazie.


import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.Color;
import java.awt.Font;
import java.awt.Image;


import javax.swing.JPasswordField;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

import javax.swing.JTextArea;
import javax.swing.JToggleButton;
import javax.swing.JTextPane;
import javax.swing.JSpinner;
import javax.swing.JList;
import javax.swing.JSlider;
import javax.swing.JScrollBar;
import javax.swing.JSeparator;
import javax.swing.JFormattedTextField;
import javax.swing.SwingConstants;
import javax.swing.JInternalFrame;


import java.sql.*;

import java.awt.event.*;      // inserirla per gestire gli eventi
// import java.util.EventListener;  

 // public class login extends JFrame  implements ActionListener   {

 public class login extends JFrame    {

	private JPanel contentPane;
	private JTextField txtUserName;
	private JPasswordField pwdUser;
	
	

	// parametri per connessione
	
	/*
	private static Connection conn = null;
	private Statement s = null;
	private ResultSet rs = null;
	*/
	
	private static Connection conn;
	private static Statement s;
	private static ResultSet rs;
	private static String MsgResult;
	
	private String TxtMessaggio;
	
	

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					
					login frame = new login();

					EseguiConnessione();
					frame.setTitle("Login in Java");
		     //       frame.formattedTextField.setText(MsgResult);
					frame.setVisible(true);

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	

	
	
	public login() {
		
		/*
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		*/
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 473, 289);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBounds(33, 63, 196, 26);
		contentPane.add(panel_1);
		panel_1.setLayout(null);
		
		JLabel lblPwd = new JLabel("Password");
		lblPwd.setBounds(0, 12, 60, 14);
		panel_1.add(lblPwd);
		
		pwdUser = new JPasswordField();
		pwdUser.setBounds(87, 0, 109, 20);
		panel_1.add(pwdUser);
		
		JLabel lblNameUtente = new JLabel("Visualizza Nome Utente");
		lblNameUtente.setFont(new Font("Tempus Sans ITC", Font.PLAIN, 14));
		lblNameUtente.setForeground(new Color(255, 127, 80));
		lblNameUtente.setBounds(33, 103, 251, 20);
		contentPane.add(lblNameUtente);
		
		JLabel lblRuolo = new JLabel("Visualizza Ruolo Utente");
		lblRuolo.setForeground(new Color(255, 127, 80));
		lblRuolo.setFont(new Font("Tempus Sans ITC", Font.PLAIN, 14));
		lblRuolo.setBounds(33, 134, 231, 20);
		contentPane.add(lblRuolo);
		
		JButton btnLogin = new JButton("Login");
		btnLogin.setBounds(80, 181, 109, 28);
		contentPane.add(btnLogin);
		
		
		JLabel lblLogo = new JLabel("");
		Image imgLogo = new ImageIcon(this.getClass().getResource("./imagesLogin.png")).getImage();
		lblLogo.setIcon(new ImageIcon(imgLogo));
		lblLogo.setBounds(316, 35, 108, 135);
		contentPane.add(lblLogo);
		
		
		JPanel panel = new JPanel();
		panel.setBounds(33, 27, 192, 20);
		contentPane.add(panel);
		panel.setLayout(null);
		
		JLabel lblUserName = new JLabel("User Name");
		lblUserName.setBounds(0, 3, 52, 14);
		panel.add(lblUserName);
		lblUserName.setHorizontalAlignment(SwingConstants.LEFT);
		
		txtUserName = new JTextField();
		txtUserName.setBounds(86, 0, 106, 20);
		panel.add(txtUserName);
		txtUserName.setColumns(10);

		txtUserName.addActionListener(new ActionListener() // definito l'ascoltatore degli eventi
		{
			 @Override
			public void actionPerformed(ActionEvent e)
			{
				letturaUserName();
			}
		});

			

		JPanel panel_2 = new JPanel();
		panel_2.setBounds(18, 226, 441, 21);
		contentPane.add(panel_2);
		panel_2.setLayout(null);
		
		
		
		JLabel lblIconMessage = new JLabel("ico");
		
		Image imgLogoMessage = new ImageIcon(this.getClass().getResource("./Ko32x32.png")).getImage();
		lblIconMessage.setIcon(new ImageIcon(imgLogoMessage));
		lblIconMessage.setBounds(0, 0, 32, 32);
		panel_2.add(lblIconMessage);
		lblIconMessage.setHorizontalAlignment(SwingConstants.LEFT);
		
		
		
		JSeparator separator01 = new JSeparator();
		separator01.setBounds(18, 0, 1, 18);
		panel_2.add(separator01);
		separator01.setOrientation(SwingConstants.VERTICAL);
		separator01.setBackground(Color.BLUE);
		
		JLabel lblDay = new JLabel("Day");
		lblDay.setBounds(293, 1, 69, 20);
		panel_2.add(lblDay);
		lblDay.setHorizontalAlignment(SwingConstants.LEFT);
		
		JSeparator separator02 = new JSeparator();
		separator02.setOrientation(SwingConstants.VERTICAL);
		separator02.setBackground(Color.BLUE);
		separator02.setBounds(335, 0, 1, 18);
		contentPane.add(separator02);

		JLabel lblHms = new JLabel("hh:mm:ss");
		lblHms.setBounds(372, 0, 69, 20);
		panel_2.add(lblHms);
		lblHms.setHorizontalAlignment(SwingConstants.LEFT);
		
		JSeparator separator03 = new JSeparator();
		separator03.setBounds(368, 0, 1, 18);
		panel_2.add(separator03);
		separator03.setOrientation(SwingConstants.VERTICAL);
		separator03.setBackground(Color.BLUE);
		
		JFormattedTextField formattedTextField = new JFormattedTextField();
		formattedTextField.setBounds(19, 1, 264, 20);
		panel_2.add(formattedTextField);
		formattedTextField.setText("riga messaggi");
		formattedTextField.setHorizontalAlignment(SwingConstants.LEFT);
		
	}

		
	public static void EseguiConnessione()
	{
		
		conn = null;
		s = null;
		rs = null;
		MsgResult = null;
		
        try {
        	Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        }
        catch(ClassNotFoundException ex) {
            System.out.println("Problem in loading MS Access JDBC driver");
            ex.printStackTrace();
            System.out.println(ex.getMessage());
        }
		
	  try
        {
		  
            //String msAccDB = "C:\\Archivi\\Sif.accdb";
		    String msAccDB = "C:/Archivi/Sif.accdb";
            String database = "jdbc:ucanaccess://" + msAccDB; 
 
            conn = DriverManager.getConnection(database);
            
            System.out.println("Eseguita correttamente la connessione a OleDb su Sif");
            MsgResult = "Db-Access Sif Connessione riuscita";

  
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            System.out.println(ex.getMessage());
        }
	
 

	}

	private void letturaUserName()
	{
		System.out.println("sono uscito dala textbox  username");
	}
	

}


Mi premerebbe sapere se all'interno dell'evento posso richiamare anche metodi esterni (la versione finale del metodo che tratta l'uscita dal campo
jTextFiled deve prevedere d effettuare una lettura nella tabella anagrafica degli utenti in base allo user id inserito)
Allegati:
19656_0608ea66485a6473c352763c7d2aee46.jpg
19656_0608ea66485a6473c352763c7d2aee46.jpg

5 Risposte

  • Re: Gestione eventi su JtextField Non funziona

    misonsan ha scritto:


    Ho una form di login in cui devo gestire degli eventi in base al contenuto inserito dall'utente.
    Ho messo nel codice la gestione eventi associata alla jtextfiled della username.
    Ovviamente non funziona.
    Non ho molto tempo ora (sto uscendo dall'ufficio) ma in che senso non funziona?
    Bisogna fare una precisazione (se non la sai già): un ActionListener registrato su un JTextField causa l'evento solo quando si preme "invio" avendo il focus nel text field. Non avviene quando si fa "tab" (insomma si passa ad altro componente con la tastiera) o quando si clicca altrove.
  • Re: Gestione eventi su JtextField Non funziona

    Ciao Andrea

    Grazie per la cortese risposta.
    Mi rendo conto di aver posto forse un quesito che forse non esiste, ma avendo lavorato in Visual Basic e in C# cerco di comparare gli eventi che avevo in quei mondi in questo IDE.
    nell'oggetto textbox sin in Visual basic che in C# esiste l'evento lostfocus e cioè all'uscita dal campo.
    Quindi speravo di poter avere anche in Java lo stesso tipo di evento.
    A me serviva questa condizione per poter effettuare all'uscita dalla textbox o, in questo ambiente JTestField, una lettura sul data base con la user id inserita per far visualizzare su una jlabel il nome dell'utente qualora fosse stato inserito un utente valido.

    Mi par di capire che qui non si può fare.
    puoi farmi un esempio di gestione eventi associato a una textbox o a un bottone utilizzando i listener ?
    Mi è ancora poco chiaro il meccanismo .
    Cerco di spiegarmi meglio.

    Su un bottone posso pensare di dover avere dei comportamenti diversi al verificarsi di 3 (metto ad esempio) condizioni.
    1) passo sopra al bottone con il mouse;
    2) faccio click sul bottone;
    3) faccio doppio click sul bottone

    poi magari potrebbero esserci altre condizioni, ma limitiamocia questo.
    Puoi farmi un esempio banalissimo (magari un progettino) in cui gestisci queste situazioni con i rispettivi eventi ?

    Grazie

    Moreno
  • Re: Gestione eventi su JtextField Non funziona

    misonsan ha scritto:


    nell'oggetto textbox sin in Visual basic che in C# esiste l'evento lostfocus e cioè all'uscita dal campo.
    Quindi speravo di poter avere anche in Java lo stesso tipo di evento.
    In Swing, java.awt.event.FocusListener, suoi metodi focusGained/focusLost

    misonsan ha scritto:


    Su un bottone posso pensare di dover avere dei comportamenti diversi al verificarsi di 3 (metto ad esempio) condizioni.
    1) passo sopra al bottone con il mouse;
    2) faccio click sul bottone;
    3) faccio doppio click sul bottone
    Su un pulsante JButton generalmente si registra solo un ActionListener, è la "azione" del pulsante ad alto livello. Ma si può anche registrare es. un MouseListener per gestire gli eventi del mouse a basso livello. Ma raramente serve.
  • Re: Gestione eventi su JtextField Non funziona

    Grazie Andrea per la cortese e rapida risposta.

    Ho cercato di trovare la soluzione alla compilazione della classe "Anadip" (in futuro cercherò di usare nomi completi e parlanti. Grazie del consiglio !!)

    Ho creato i metodi per la validità dei controlli.
    ho un paio di costrutturi per l'istanza della classe.
    Puoi vedere se può andare bene ?
    ti allego il codice.
    
    package esempio.Entities;
    
    /**
     *
     * @author mison
     */
    public class Anadip {
       
        private long matricola;
        private String cognome;
        private String nome;
        private long titolo;
        private String username;
        private String password;
        
        
        //  
        
        
        
        public long Matricola() {
            return matricola;
        }
    
        public String Cognome()
        {
            return cognome;
        }
        
        public String Nome()
        {
            return nome;
        }
        
        public long Titolo()
        {
            return titolo;
        }
        
        public String Username()
        {
            return username;
        }
        
        public String Password()
        {
            return password;
        }  
        
       
        public void Matricola(long matricola) {
          this.matricola = matricola;
       }  
         
       public void Cognome(String cognome) {
          this.cognome = cognome;
       }
        
       public void Nome(String nome)
       {
           this.nome = nome;
       }
       
          public void Titolo(long titolo) {
          this.titolo = titolo;
       }  
       
         public void Username(String userrname) {
          this.username = username;
       }
       
          public void Password(String password) {
          this.password = password;
       } 
         
          public Anadip() {
          super();
          // TODO Auto-generated constructor stub
       }
    
    
       public Anadip(long matricola, String cognome, String nome, long titolo, String username, String password) {
          this.matricola = matricola;
          this.cognome = cognome;
          this.nome = nome;
          this.titolo = titolo;
          this.username = username;
          this.password = password;
    
       }
    
       //  controlli di correttezza dati
       
       
       public boolean IsValidMatricola()
       {
           return this.matricola > 0;
       } 
       
       public boolean IsValidCognome()
       {
           return this.cognome != null && this.cognome.trim().length() > 0;
       }
       
       public boolean IsValidNome()
       {
           return this.nome != null && this.nome.trim().length() >0;
       }
       
       public boolean IsValid()
       {
           return IsValidMatricola() && IsValidCognome() && IsValidNome();
       }
        
      
    
    ora ho un altro piccolo problema.

    Come utilizzare la classe nella form.
    effettuato l'istanza della classe, (dopo il costruttore della classe form), e dopo aver effettuata la lettura dal database con il valore della matricola inserita dall'utente. popolo le property della classe dai valori del recordset letto.
    Non ricordo come "Agganciare" le property ai controlli textbox della form

    Spero di aver esposto il problema.

    Hai per caso un progettino minimale del genere ?
    Vorrei imparare a pescare e non mi interessa avere il pesce gratis, ma che mi insegnino a pescare.
    Il progettino vorrebbe essere una forma di riflessione su come leggere.

    Secondo Problema.
    Sicuramente esiste il Binding.
    Come funziona in java ?

    grazie

    Moreno
  • Re: Gestione eventi su JtextField Non funziona

    Scusa andrea.
    ho sbagliatoa rispondere.
    per caso ero aperto su questo argomento e ho inserito erroneamente la risposta.
    ancora scusa.
    ciao
Devi accedere o registrarti per scrivere nel forum
5 risposte