Newsgroup: it.comp.java
Titolo: gruCreare eventi personalizzati

ciao a tutti
ho un piccolo problema
ho costruito una UI composta da quattro componenti personalizzati però
adesso sono fermo su di un picolo problema.
vorrei che i componenti potessero generare degli eventi per comunicare
quando questi sono "pronti"
Adesso provo a spiegarmi meglio.
I miei quattro componenti sono dei pannelli che contengono delle
JTextField e altri oggetti per l'imput di valori. Quello che volevo
realizzare è che quando ognuno dei pannelli fosse stato riempito con
generasse un evento che deve essere raccolto dal JFrame che contiene
il 
componente.il
 quale contiene poi i vari metodi che dovranno essere
invocati all'arrivo degli eventi.
Sapreste come fare?
Grazie Ciao

 il componente.
Devi dirci cosa intendi con "pronti".
Di solito si usa il focus listener.
  - L'utente riempe la casella1.
  - L'utente passa alla casella2, (quindi la casella1 perde il focus e
    la casella2 lo acquisisce).
  - Il programma rileva che la casella1 ha perso il focus e considera
    che l'utente abbia terminato l'inserimento.
  - Il programma approfitta di questo momento per leggere il contenuto di
    casella1 per fare la validazione.
Per implementare tutto ciň devi usare un FocusListener scrivendo il tuo 
focusLost().
Esistono altri listener, se quello che cerchi č diverso da quello che ho 
immaginato.
Una soluzione piů sofisticata e scalabile potrebbe essere usare i 
beansbinding. Ma puoi cominciare con il FocusListener.
-- 
Andrea Francia
http://andreafrancia.blogspot.com/2008/07/colinux-linux-dentro-windows.html

 beansbinding. Ma puoi cominciare con il FocusListener.
Hai qualche idea su come fare?
Ciao e grazie
Seiya


Ci sono molti esempi sull'uso dei listener sul sito della Sun.
In coda ti incollo un esercizio che ho fatto apposta per te, l'ho fatto 
senza usare il Gui Builder di Netbeans per mantere le cose semplici, il 
layout non funziona granché perché ormai ho disimparato a farlo via 
codice (aspetto commenti contro gli IDE in tal proposito).
La soluzione che ti propongo e gli esercizi sul sito della Sun sono alla 
vecchia maniera (con l'uso dei listeners).
Esistono soluzioni piu' sofisticate che si basano sui beansbinding 
(
https://beansbinding.dev.java.net/
) che comunque alla fine usano in 
modo automatizzato gli stessi listener che useresti tu (più altre cose).
Se vuoi saperne di più vai a leggere il loro sito e tieni conto che il 
Gui Builder di Netbeans genera codice che usa i beansbinding.
package provafocuslistener;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
  *
  * @author Andrea
  */
public class Main {
     /**
      * @param args the command line arguments
      */
     public static void main(String[] args) {
         JFrame frame = new JFrame("Titolo");
         JPanel panel = new JPanel(new GridBagLayout());
         final JTextField textField = new JTextField(20);
         final JLabel validationLabel = new JLabel();
         textField.addFocusListener(new FocusAdapter() {
             @Override
             public void focusLost(FocusEvent e) {
                 try {
                     Integer.parseInt(textField.getText());
                     validationLabel.setText("E' un numero, vai 
tranquillo");
                 } catch(NumberFormatException ex) {
                     validationLabel.setText("Non è un numero! Come ti 
permetti di inserirmi una cosa che non è numero !!!!");
                 }
             }
         });
         panel.add(textField);
         panel.add(validationLabel);
         panel.add(new JButton("OK"));
         frame.add(panel);
         frame.pack();
         frame.setVisible(true);



Ti capisco, anche io con NetBeans ho completamente disimparato a fare
le interfaccie grafiche....:D
Comunque il tuo esempio è molto chiaro e semplice ed è la cosa che
vorrei fare io
il fatto è che i pannelli che utilizzo sono definiti in questo modo
public class PannelloDati1 extends JPanel {
        // Creazione del pannello, definizione dei metodi e altre
belle cose
}
e così via facendo per altri 3 pannelli. i quali verranno buttati in
un JFrame in questo modo
public class MioFrame extends JFrame {
          private PannelloDati1 pane1;
          private PannelloDati2 pane2;
          private PannelloDati3 pane3;
          private PannelloDati4 pane4;
          private boolean[] tutto valido = new boolean[] {false,
false, false, false};
          private JPanel panel;
          // E poi implementio il costruttore e tutti i metodi che mi
servono;
}
in poche parole il mio evento dovrebbe partire da un componente
interno ad uno dei PannelloDati ed essere raccolto e gestito
all'interno del JFrame...
Intanto provo a rivedere se riesco a propagare l'evento di focus.
E visto che ci sono vedo di dare anche un'occhiatina ai beansbindings
Ciao e grazie 1000 ancora
Seiya