è possibile fare in modo che un JButton venga attivato sia cliccandoci sopra sia premendo un tasto della tastiera(invio)?
grazie
è possibile fare in modo che un JButton venga attivato sia cliccandoci sopra sia premendo un tasto della tastiera(invio)?
grazie
Allora, in generale si può associare alla pressione di tasti il click di un bottone. Per far ciò, ti serve attaccare al JButton
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 puntocodice:setMnemonic(KeyEvent.CODICE_DEL_TASTO); //sono tutti nelle api, ti basta fare una ricerca.
Decidi tu dove far scatenare l'azione: se all'evento kePressed o keyReleasedcodice: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) { }
<´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
"The answer to your question is: welcome to tomorrow"
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
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"
cos è il focus?
il fatto è ke funziona ma solo dopo aver cliccato sul bottone
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"
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...
prova a fare
Questo dovrebbe dargli il focus, per cui la successiva pressione di <ENTER>, <BARRA SPAZIATRICE>, o click classico del mouse lo attiveràcodice:tuoBottone.requestFocus();
<´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
"The answer to your question is: welcome to tomorrow"
dove dovrei inserirlo?
Dopo il tuo
codice:getContentPane().add(p); //aggiungi b.requestFocus();
<´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
"The answer to your question is: welcome to tomorrow"