Alguém pode me explicar como funciona com exemplo?
Esse método ‘emula’ o evento disparado pelo clique em um botão, ou melhor, de acordo com a documentação:
Programaticamente executa um “clique”. Isso é o mesmo que se o usuário tivesse pressionado e soltado o botão.
Fonte: Docs Oracle - Class AbstractButton
Isso é muito usado para obter uma ação que é própria de um clique de botão por meio de teclas de atalho. Por exemplo, suponha que haja o botão btnSalvar que salva os dados de um formulário. Se quisermos acionar o método do botão por meio das teclas de atalho ctrl + s, pode-se usar esse método. Por exemplo:
private void definirAtalhosPainelControle(){
/*Evento Botão Salvar*/
getRootPane().getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_DOWN_MASK), "eventoBtnSalvar");
getRootPane().getActionMap().put("eventoBtnSalvar",
new AbstractAction("eventoBtnSalvar"){
@Override
public void actionPerformed(ActionEvent e) {
if(btnSalvar.isEnabled())
btnSalvar.doClick();
}
});
[...]
}
O meu problema é que estou fazendo uma calculadora e trabalhei com concatenação de números double e não String. A concatenação está funcionando, mas quando aperto a tecla de igual e depois digito o número, há uma concatenação do total com o número seguinte, tipo total 421 e numero seguinte 1, fica no campo texto da calculadora 4211. Isso não ocorre quando teclo mais depois do total ou qualquer outra tecla de operação. Pensei usar o doclic para acionar a tecla mais por exemplo e evitar este problema. Bom é o que eu acho que posso fazer. Estou lhe enviando os pedaços do programa envolvidos nisto abaixo:
Parte do botão de igual:
private void botaoigualActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
num2 = Double.valueOf(visor.getText());
if (operacao != ‘’){
switch(operacao){
case ‘+’:
total1 = num1 + num2;
visor.setText((String.valueOf(total1)));
num1 = 0;
num2 = 0;
operacao = '’;
break;
case ‘-’:
total1 = num1 - num2;
visor.setText((String.valueOf(total1)));
num1 = 0;
num2 = 0;
operacao = ‘_’;
break;
case ‘*’:
total1 = num1 * num2;
visor.setText((String.valueOf(total1)));
break;
case ‘/’:
total1 = num1 / num2;
visor.setText((String.valueOf(total1)));
break;
default:
visor.setText(“Operação incorreta”);
break;
Parte do botão de mais, onde não há o problema:
private void botaoadicaoActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
operacao = ‘+’;
num1 = Double.valueOf(visor.getText());
visor.setText(“0”);
}
Parte da concatenação de número que tenho que fazer com double:
public void digitarNumeros(String temp1){
String temp = visor.getText();
double total;
if (Double.valueOf(temp)==0){
visor.setText(temp1);
}else{
total = (Double.valueOf(temp) * 10) + Double.valueOf(temp1);
DecimalFormat df = new DecimalFormat("#.########");
visor.setText(df.format(total));
}
}