Funcionamento do doclick

2 respostas
J

Alguém pode me explicar como funciona com exemplo?

2 Respostas

I

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();
		}
	});
	
	[...]
}
J
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,  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 != <em>’){

switch(operacao){

case ‘+’:

total1 = num1 + num2;

visor.setText((String.valueOf(total1)));

num1 = 0;

num2 = 0;

operacao = '</em>’;

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

}

}
Criado 3 de dezembro de 2019
Ultima resposta 3 de dez. de 2019
Respostas 2
Participantes 2