Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    40

    Aiuto con JButton

    Salve a tutti!
    Ho un frame fatto con swing dove ci sono vari campi e un unico bottone.
    Come faccio a fare in modo che se premo il tasto della tastiera INVIO mi equivalga ad aver premuto col mouse sul tasto JButton?
    Ringrazio anticipatamente quanti risponderanno

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Per il futuro, cerca di utilizzare titoli più significativi e conformi al regolamento (senza epiteti: pare ovvio a chiunque che se posti qui hai bisogno di aiuto... non serve ribadirlo!)

    Ad ogni modo, per far sì che il tuo pulsante risulti "quello di default" lo devi specificare: utilizza il metodo setDefaultCapable() della classe JButton. (La documentazione è chiarissima!)


    Modifico il titolo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    40
    Ti ringrazio per la risposta e mi scuso per la poca chiarezza espositiva.
    In realtà avevo già provato quel metodo, ma non succedeva (e non succede niente) se all'interno del mio Frame se premo INVIO dalla tastiera...
    C'è qualcosa che sbaglio?
    Per sicurezza posto del codice di prova in cui ho testato il metodo che anche tu mi hai consigliato:

    Codice PHP:
    public class Cerca extends javax.swing.JPanel {
        
        public 
    Cerca() {
            
    initComponents();
        }
        
        private 
    void initComponents() {
            
    jLabel1 = new javax.swing.JLabel();
            
    jTextField1 = new javax.swing.JTextField();
            
    jButton1 = new javax.swing.JButton();

            
    jLabel1.setText("Inserisci testo");

            
    jButton1.setText("Cerca");
            
    jButton1.addActionListener(new java.awt.event.ActionListener() {
                public 
    void actionPerformed(java.awt.event.ActionEvent evt) {
                    
    jButton1ActionPerformed(evt);
                }
            });
            
    jButton1.setDefaultCapable(true);
            
    //jButton1.setDefaultCapable(false);
            
            
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
            
    this.setLayout(layout);
            
    layout.setHorizontalGroup(
                
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .
    addGroup(layout.createSequentialGroup()
                    .
    addContainerGap()
                    .
    addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .
    addComponent(jTextField1javax.swing.GroupLayout.DEFAULT_SIZE346Short.MAX_VALUE)
                        .
    addComponent(jLabel1)
                        .
    addComponent(jButton1javax.swing.GroupLayout.Alignment.TRAILING))
                    .
    addContainerGap())
            );
            
    layout.setVerticalGroup(
                
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .
    addGroup(layout.createSequentialGroup()
                    .
    addContainerGap()
                    .
    addComponent(jLabel1)
                    .
    addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .
    addComponent(jTextField1javax.swing.GroupLayout.PREFERRED_SIZEjavax.swing.GroupLayout.DEFAULT_SIZEjavax.swing.GroupLayout.PREFERRED_SIZE)
                    .
    addGap(313131)
                    .
    addComponent(jButton1)
                    .
    addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZEShort.MAX_VALUE))
            );
        }                                      

        private 
    void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            
    jTextField1.transferFocus();
            
    System.out.println("ciao");
        }                                        
        
        public static 
    void main(String args[]) {
            
    JFrame frame=new JFrame("prova");
            
    frame.add(new Cerca());
            
    frame.setSize(800,600);
            
    frame.setVisible(true);
        }   
        
        
    // Variables declaration - do not modify                     
        
    private javax.swing.JButton jButton1;
        private 
    javax.swing.JLabel jLabel1;
        private 
    javax.swing.JTextField jTextField1;
        
    // End of variables declaration                   
        

    Ringrazio quanti mi aiuteranno

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Hai ragione, è una delle cose che non sono mai riuscito a capire...
    E' necessario agire in modo diverso (e con la struttura che hai tu diventa un po' difficile... non serve nemmeno scommettere che è codice autogenerato: solo gli IDE di tipo RAD riescono a produrre del codice così pietoso e ingestibile.
    codice:
    frame.getRootPane().setDefaultButton( jButton1 );
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    40
    Purtroppo non va
    La cosa "divertente" è che io per prova ho fatto una cosa del genere:
    Codice PHP:
    frame.getRootPane().setDefaultButton(jButton1);
            
    System.out.println(jButton1.isDefaultButton()); 
    e mi ritorna FALSE!!!

    Cosa mi sfugge? C'è forse qualche politica di focus che dovrei fare? boh!

    Ps: per i layout uso netbeans...è codice incomprensibile, però risparmio molto tempo

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Deve funzionare.
    Il fatto che ti restituisca false non c'entra niente: quello dipende dalla proprietà impostata con setDefaultCapable(), che come abbiamo visto non fa nulla.

    Quello che devi fare tu è semplicemente dire al RootPane che il pulsante è quello di default. Questo codice, del tutto equivalente, funziona perfettamente
    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    
    public class Pulsante extends JFrame implements ActionListener {
       private JButton def;
       public Pulsante() {
          getContentPane().setLayout( null );
    
          def = new JButton("Default");
          def.setBounds(80, 30, 180, 30);
          def.addActionListener( this );
    
          getRootPane().setDefaultButton( def );
    
          getContentPane().add( def );
    
          setSize(500, 500);
          setTitle("Prova");
          setDefaultCloseOperation( EXIT_ON_CLOSE );
          setVisible( true );
       }
    
       public void actionPerformed(ActionEvent ae) {
          System.out.println("Pulsante premuto");
       }
    
       public static void main(String [] args) {
          Pulsante p = new Pulsante();
       }
    }
    E come puoi vedere, senza usare NetBeans, in meno di 3 minuti si fanno le stesse identiche cose... basta sapere quello che si sta facendo.

    PS: Anch'io uso NetBeans... ma solo per organizzarmi i progetti e per tenere aperte più classi contemporaneamente... il codice è affar mio, non di NetBeans

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    40
    Ti ringrazio, il tuo funziona... vedrò di farlo funzionare anche nel mio codice

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.