Funcionamento do doclick

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));
}
}