Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [Java] tasti collegati ai JButton

    è possibile fare in modo che un JButton venga attivato sia cliccandoci sopra sia premendo un tasto della tastiera(invio)?
    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Allora, in generale si può associare alla pressione di tasti il click di un bottone. Per far ciò, ti serve attaccare al JButton
    codice:
    setMnemonic(KeyEvent.CODICE_DEL_TASTO);
    //sono tutti nelle api, ti basta fare una ricerca.
    Però penso che tu voglia semplicemente un sistema per attivare l'azione del tasto alla pressione di Enter, il che può essere simulato attaccando, oltre all'ActionListener anche un KeyListener al bottone stesso: a quel punto

    codice:
    public void keyPressed(KeyEvent ke) {
        if (ke.getKeyCode()==KeyEvent.VK_ENTER) {
          ((JButton)(ke.getSource())).doClick();
        }    
      }
      
      public void keyReleased(KeyEvent ke) {
      }
      
      public void keyTyped(KeyEvent ke) {
      }
    Decidi tu dove far scatenare l'azione: se all'evento kePressed o keyReleased
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    b = new JButton ("Calcola LCS");
    c = new JButton ("Descrizione");
    d = new JButton ("Esci");
    e = new JButton ("Matrice 1");
    f = new JButton ("Matrice 2");
    p = new JPanel ();


    b.addActionListener(this);
    c.addActionListener(this);
    d.addActionListener(this);
    e.addActionListener(this);
    f.addActionListener(this);

    b.addKeyListener(new KeyAdapter()
    {
    public void keyPressed(KeyEvent ke)
    {
    if(ke.getKeyChar() == KeyEvent.VK_ENTER)
    {
    JButton sorgente = (JButton)ke.getSource();
    sorgente.doClick();
    } else if(ke.getKeyChar() == KeyEvent.VK_SPACE)
    {
    ke.consume();
    }
    }
    });
    add(b);

    p.add(l);
    p.add(text);
    p.add(l1);
    p.add(text2);
    p.add(l2);
    p.add(text3);
    p.add(text4);
    p.add(b);
    p.add(c);
    p.add(d);
    p.add(e);
    p.add(f);

    getContentPane().add(p);
    }

    public void actionPerformed (ActionEvent event)
    {


    Object source = event.getSource(); //Bottone CALCOLA
    if(source == b){

    s1 = text.getText();
    s2 = text2.getText();

    if(s1.equals("") || s2.equals("")){
    JOptionPane.showMessageDialog(null,"Devi inserire entrambe le stringhe!");

    }
    else{
    LCS lcs1 = new LCS(s1,s2);
    int mat[][]=new int[s1.length()][s2.length()];
    mat=lcs1.AlgoritmoLCS(s1,s2);
    text3.setText(Integer.toString(mat[s1.length()][s2.length()]));
    text4.setText(lcs1.stampaLCS(s1,s2));
    }
    }



    funziona solo se prima clicco sul bottone normalemte.
    se invece clicco subito invio non fa nulla

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Non è che per caso al bottone manchi il focus?
    Tra l'altro comunque poco più sotto c'è un errore concettuale: confronti Object con "==", che invece si usa solo per i tipi semplici (int, long etc.)... dovresti usare Object.equals(Object)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    cos è il focus?


    il fatto è ke funziona ma solo dopo aver cliccato sul bottone

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Bella forza: è perché il bottone non ha il focus! Il focus è... con un esempio pratico, quello stato del bottone (o di un altro componente) per cui la pressione della barra spaziatrice (o di invio, in certi sistemi) ne attiva una proprietà. Se hai più di un componente, non è detto che il focus sia sul tuo bottone a cui hai attacco il KeyListener. Java tra l'altro, non prende di default <ENTER> per scatenare l'actionPerformed (prende però la Barra Spaziatrice), ed è quello il motivo per cui bisogna usare un KeyListener sul bottone.

    Se tu prima pigi il bottone in questione via mouse, gli hai anche assegnato il focus, per cui la successiva pressione di <ENTER> correttamente ne scatena nuovamente l'azione collegata
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    come posso inserire il focus?

    scusa se ti chiedo tante cose ma questo va ben oltre il misero programma ke abbiamo fatto....quindi nn saprei dove mettere le mani...

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    prova a fare

    codice:
    tuoBottone.requestFocus();
    Questo dovrebbe dargli il focus, per cui la successiva pressione di <ENTER>, <BARRA SPAZIATRICE>, o click classico del mouse lo attiverà
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    dove dovrei inserirlo?

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Dopo il tuo

    codice:
    getContentPane().add(p);
    //aggiungi
    b.requestFocus();
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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 © 2024 vBulletin Solutions, Inc. All rights reserved.