Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 42
  1. #1

    Premere il pulsante invio per stampare

    Salve stò creando un programma con un'interfaccia che ha due 4 JTextField, ma concentriamoci solo su due di questi che chiamo textCLIENTE e textSTAMPA. Vorrei che scrivendo un testo e premendo il pulsante "Invio" questo si stampi su textSTAMPA, So che non è corretto ma come posso fare?
    Che metodo devo usare al posto di Integer.parseInt?
    grazie.

    codice:
    public void keyPressed (KeyEvent e) {
            displayInfo (e, "KEY premuto:");
            
    
    
            
        }
        
        private void displayInfo(KeyEvent e, String string) {
            // TODO Auto-generated method stub
            String CLIENTE;
            
            CLIENTE = Integer.parseInt(textCLIENTE.getText());
            
            
            textSTAMPA.setText( "<html>" +
                    "<br>---------------------------------------------" +
                    "<br>" +     CLIENTE +
                    "</html> ");  
             
            
        }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Innanzitutto, non è necessario un KeyListener (dovresti pure verificare che il tasto premuto sia il invio e non uno qualunque).
    Se registri un ActionListener su un JTextField ricevi in automatico l'evento di azione quando si preme invio nel componente. Insomma è già gestito "di serie" e senza dover fare altro di più complesso o strano.

    Riguardo al parseInt, non ho capito a cosa ti serve. Integer.parseInt serve quando una stringa ti aspetti che rappresenti un valore numerico es. "123" e vuoi ottenere un valore numerico primitivo int es. 123 per farci operazioni matematiche ecc...

    textCLIENTE.getText() ti dà un String, se vuoi che qualunque testo contenga vada inserito in un testo più esteso, puoi concatenarlo direttamente, NON serve parseInt .
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ho provato facendo questo ma non funziona, posso chiederti se puoi correggermelo grazie mille.

    codice:
    public class EventiTastiera implements KeyListener {
    
    
            public EventiTastiera(){
            }
    
    
            public void keyPressed(KeyEvent e){
            if(e.getKeyCode()==KeyEvent.VK_ENTER) 
            return;
            }
    
    
            public void keyReleased(KeyEvent e){}
    
    
            public void keyTyped(KeyEvent e){}
    
    
            public void addKeyListener(ActionListener actionListener) {
                // TODO Auto-generated method stub
                
            }
            }
    
    
        
        public class Ascolta extends JPanel{
            public void Ascolta(){
            setFocusable(true);
            requestFocusInWindow();
            EventiTastiera ENTER=new EventiTastiera();
            ENTER.addKeyListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
            
            String CLIENTE = textCLIENTE.getText();
             
            textSTAMPA.setText( "<html>" +
                        "<br>---------------------------------------------" +
                        "<br>" +     CLIENTE +
                        "</html> ");  
            
                }
            });
                }
            }
    P.S. ho tenuto il KeyListener perchè non so come torglierlo.
    Ultima modifica di desiderio; 26-12-2016 a 04:10

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    Ho provato facendo questo ma non funziona, posso chiederti se puoi correggermelo grazie mille.
    Mah .. è proprio da risistemare tutto, perché c'è ben (molto) poco che ha senso.

    Stai ancora implementando un KeyListener in EventiTastiera ma che non sta facendo nulla di concreto ed utile.
    Inoltre il addKeyListener che hai definito in EventiTastiera non serve a nulla (e non sta facendo niente).
    Anche se in Ascolta() crei un EventiTastiera, se invochi addKeyListener è quello vuoto che hai scritto e che non fa nulla e quindi tutta la implementazione con classe anonima del ActionListener non serve a nulla perché nessun componente farebbe da sorgente degli eventi.

    Ascolta: non cercare di fare cose "strane", contorte o che altro ... è molto più semplice. Hai un textfield che hai definito textCLIENTE e vuoi ricevere la azione quando su questo si preme invio? L'ho detto prima: REGISTRA un ActionListener SUL textfield appunto textCLIENTE.
    Che in sostanza vuol dire:

    textCLIENTE.addActionListener( ....tua implementazione di ActionListener.... );

    E se vuoi farlo con classe "anonima", ok:

    codice:
    textCLIENTE.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // è stato premuto invio sul textCLIENTE, fai quello che vuoi ......
        }
    });

    Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Perdonami ho provato cosi, ma non funziona ti chiedo se puoi scrivermi quello funzionante perchè cosi lo vedo e posso capire com'è costruito altrimenti non capisco, i termini che usate per spiegare non essendo del campo ciò che magari date per scontato io faccio ancora difficoltà. ti ringrazio nuovamente per la disponibilità.

    codice:
    public class EventiTastiera {
    
    
    
    
            public EventiTastiera(){
            }
    
    
    
    
            public void keyPressed(KeyEvent e){
            if(e.getKeyCode()==KeyEvent.VK_ENTER) 
            return;
            }
    
    
    
    
            public void keyReleased(KeyEvent e){}
    
    
    
    
    		public void keyTyped(KeyEvent arg0) {
    			// TODO Auto-generated method stub
    			
    		}
    
    
    	}
    
    
            public void keyTyped(KeyEvent e){}
        public class Ascolta{
          public void Ascolta(){
          setFocusable(true);
          requestFocusInWindow();
         
        textCLIENTE.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          // è stato premuto invio sul textCLIENTE, fai quello che vuoi ......
    
    
    
    
    	String CLIENTE = textCLIENTE.getText();
    	 
    	textSTAMPA.setText( "<html>" +
    		        "<br>---------------------------------------------" +
    		        "<br>" +     CLIENTE +
          		"</html> ");  
    	
           }	
    	});	
      }
          
        }

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Purtroppo io non ho la visione completa sul tuo codice (c'è sicuramente molto altro oltre ai pezzi riportati qui). Non so perché vuoi fare una classe "EventiTastiera", non so perché ti serve una classe "Ascolta" e dove viene istanziata ed usata, non so dove sono definite le variabili textCLIENTE, textSTAMPA, non so dove vengono istanziati i componenti, come sono disposti, ecc....

    Posso farti un esempio, basilare ma completo.

    codice:
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JFrame;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;
    
    public class FramePrincipale extends JFrame {
        private JTextField text1;
        private JTextField text2;
    
        public FramePrincipale() {
            super("Prova");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setSize(320, 150);
            setLayout(new FlowLayout());
    
            text1 = new JTextField(20);
            text2 = new JTextField(20);
    
            add(text1);
            add(text2);
    
            text1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String testo = text1.getText();
                    text2.setText(testo.toUpperCase());
                }
            });
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new FramePrincipale().setVisible(true);
                }
            });
        }
    }

    Scrivi qualcosa nel primo textfield, premi invio e il testo sarà riportato in "uppercase" nel secondo textfield.
    Il "succo" dell'uso di addActionListener su un JTextField è tutto lì.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Ti ringrazio moltissimo perchè è stato molto chiaro il codice. Pensavo che porre una questione pricipale fosse poi chiaro il rimanente codice ma mi accorgo che non è cosi, vorrei chiederti, Praticamoento quello che vorrei è realizzare è un programma dove su 5 JTextField, una volta premuto il tasto invio, mi stampasse tutto ciò che ho scritto su un altro JTextField di nome che già conosciamo textSTAMPA.
    Sucessivamente alla pressione di un JButton di nome "Save", mi salvi il contenuto. (come stringa) del JTextField "textSTAMPA" su un .doc. Nello stesso .doc possano essere salvate altre stringhe, ripartendo col processo, una sotto l'altra.


    codice:
        textCLIENTE.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                
                
                String CLIENTE = textCLIENTE.getText();
                String NUM = textNUM.getText();
                
                String DATAora = DateTimeFormatter.ofPattern("dd/MM/yyyy").format(localDate) + sdf.format(date);
        
        
                textSTAMPA.setText( "<html>" +
                   
                       + NUM.toUpperCase()  + CLIENTE.toUpperCase() + "___" + DATAora + 
                  "</html> ");  
        
           }
        });
    Ovviamente qui c'è il codice che mi hai insegnato e ho aggiunto uno dei nuovi 5 JTextfield dal nome textNUM che ti dicevo, il problema che ho riscontrato è appunto che "invio" ora come ora funziona solo su "textCLIENTE", come posso renderlo cumulatico su più JTextfield? grazie


    Mentre questo è per salvare una stringa sul file "scrittura.doc", ma ho commesso errori anche qui, come posso fare? Grazie ancora

    codice:
             class ScriviUnaStringa {
          public void main(String args[])
          throws IOException {
            FileWriter w;
            w=new FileWriter("scrittura.doc");
    
    
            BufferedWriter b;
            b=new BufferedWriter (w);
    
    
            s1 = textSTAMPA.getText();
            
            
            b.write(s1);
    
    
            b.flush();
          }
        }
    
    
    PIU' IN BASSO
    
        Save.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent PRINTARE) {
                
                String Save = PRINTARE.getActionCommand();                        
                 if (Save.equals ("Save") )
                     ScriviUnaStringa();
       
                 
                 textSTAMPA.setText ("");
    
    
                                                                                                                                                      
            }
        });

    P.S. il "<br>" per andare a capo non funziona.
    Ultima modifica di desiderio; 28-12-2016 a 02:04

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    Praticamoento quello che vorrei è realizzare è un programma dove su 5 JTextField, una volta premuto il tasto invio, mi stampasse tutto ciò che ho scritto su un altro JTextField di nome che già conosciamo textSTAMPA.
    Ok, e deduco che non conta su quale textfield è stato premuto invio. Cioè, detto in altro modo, la "azione" da fare è la stessa indipendentemente da quale textfield ha ricevuto il invio.

    In tal caso non è difficile. Usando le inner class ci sono diverse soluzioni per implementare il ActionListener:

    Soluzione 1)
    Per ciascun textfield registri un ActionListener implementato con inner class "anonima", creata e passata come argomento del addActionListener per ciascun textfield. Nel actionPerformed, per evitare duplicazioni, invochi un metodo (possibilmente privato) della tua classe.

    codice:
    textField1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            eseguiAzione();
        }
    });
    
    textField2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            eseguiAzione();
        }
    });
    
    textField3.addActionListener( ......idem...... );
    textField4.addActionListener( ......idem...... );
    textField5.addActionListener( ......idem...... );

    Soluzione 2)
    Invece di creare una inner class "anonima" passata "al volo" per ciascun addActionListener ne crei una sola e la assegni ad una variabile, che poi passi a tutti gli addActionListener.

    codice:
    ActionListener azioneListener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // puoi invocare un metodo privato della tua classe principale (se è lungo)
            // oppure fare tutto qui dentro.
        }
    };
    
    textField1.addActionListener(azioneListener);
    textField2.addActionListener(azioneListener);
    textField3.addActionListener(azioneListener);
    textField4.addActionListener(azioneListener);
    textField5.addActionListener(azioneListener);

    Soluzione 3)
    Invece che implementare il listener come inner class "anonima", lo implementi in una inner class "regular" che è nient'altro che una classe che è "membro" della classe principale.

    codice:
    public class TuaClassePrincipale {
        // .....
    
        public TuaClassePrincipale() {
            // ....
            AzioneListener azioneListener = new AzioneListener();
    
            textField1.addActionListener(azioneListener);
            textField2.addActionListener(azioneListener);
            textField3.addActionListener(azioneListener);
            textField4.addActionListener(azioneListener);
            textField5.addActionListener(azioneListener);
        }
    
    
        private class AzioneListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                // puoi invocare un metodo privato della tua classe principale (se è lungo)
                // oppure fare tutto qui dentro.
            }
        }
    }

    Ci sono anche altre soluzioni, come implementare ActionListener direttamente in quella che è la TuaClassePrincipale. Personalmente non mi piace molto perché "espone" il fatto che la classe implementa il listener.

    Come vedi ci sono svariate soluzioni. Il "bello" è che i listener sono INTERFACCE e le puoi implementare in vari modi e a vari livelli sfruttando anche e soprattutto le inner class.

    NOTA: evita la soluzione 1) perché è uno spreco di classi anonime.


    Quote Originariamente inviata da desiderio Visualizza il messaggio
    Sucessivamente alla pressione di un JButton di nome "Save", mi salvi il contenuto. (come stringa) del JTextField "textSTAMPA" su un .doc. Nello stesso .doc possano essere salvate altre stringhe, ripartendo col processo, una sotto l'altra.
    Ok, tieni presente che ".doc" non vuol dire in questo caso un documento di "Office" ma solamente un testo "puro" e basta.


    Quote Originariamente inviata da desiderio Visualizza il messaggio
    Mentre questo è per salvare una stringa sul file "scrittura.doc", ma ho commesso errori anche qui, come posso fare?
    Manca sicuramente il close(), che va sempre fatto (tra l'altro anche se un write dovesse lanciare una eccezione!!).

    Quote Originariamente inviata da desiderio Visualizza il messaggio
    P.S. il "<br>" per andare a capo non funziona.
    In che senso? Dove?
    <br> presuppone HTML e quindi presuppone che un documento .htm o .html venga "aperto" o con un browser (Firefox, IE, ecc...) o con un altro applicativo/editor che legge HTML oppure usato in un componente (es. Swing di Java) che ha il supporto per HTML.
    Ultima modifica di andbin; 28-12-2016 a 11:04
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Perfetto grazie ho scelto la Soluzione 2 per i addActionListener.
    Per il salvataggio ho inserito il CLOSE ma non salva il file e di conseguenza la singola stringa comunque. Come posso sistemare? grazie
    Per il
    <br> lo usavo in un programma simile:

    codice:
    STAMPA.setText( "<html>" +
                                   
                                    "<br>---------------------------------------------" +
                                    "<br>"+ "<BS>VNT__________<BS>" +     VNTs +    "</html> ");
    Il problema è che in questo setText non funziona e vorrei lasciare spazi vuoti al posto del "_____" e vorrei andare a capo.
    Ultima modifica di desiderio; 28-12-2016 a 14:12

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    Per il salvataggio ho inserito il CLOSE ma non salva il file e di conseguenza la singola stringa comunque.
    Alt. NON crea il file o non sai o non lo vedi dove forse ti aspetti?

    Con new FileWriter("scrittura.doc") il file viene scritto nella directory "corrente" e quale che sia .... dipende da come, da dove e con cosa hai avviato la applicazione: a mano da prompt dei comandi? Da un IDE? Come?

    Quote Originariamente inviata da desiderio Visualizza il messaggio
    codice:
    STAMPA.setText( "<html>" +
                                   
                                    "<br>---------------------------------------------" +
                                    "<br>"+ "<BS>VNT__________<BS>" +     VNTs +    "</html> ");
    Cosa è STAMPA come tipo di componente?

    JTextField NON supporta più righe (è solo singola riga) e nemmeno HTML, indipendentemente da come dimensioni fisicamente il componente.
    JTextArea supporta più righe di testo puro ma NON supporta HTML.

    HTML è supportato da JEditorPane.
    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.