Olá, quero utilizar um atalho para meu botão… do tipo CTRL + S (Apertaria o botão e salvava os resultados).
Teria como fazer isso utilizando KeyListener ? Como?
Olá, quero utilizar um atalho para meu botão… do tipo CTRL + S (Apertaria o botão e salvava os resultados).
Teria como fazer isso utilizando KeyListener ? Como?
voce pode adicionar um flag de quando o CTRL for precionado
Realmente pensei nisso… mas eu quero só aceitar salvar se o CTRL estiver segurado e logo após apertar o S.
Dai a flag não resolve.
Realmente pensei nisso… mas eu quero só aceitar salvar se o CTRL estiver segurado e logo após apertar o S.Dai a flag não resolve.
package awt;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class CtrlListener implements KeyListener {
private boolean ctrl = false;
public void keyPressed(KeyEvent arg0) {
// aperta o ctrl
if (arg0.getKeyCode() == KeyEvent.VK_CONTROL) {
this.ctrl = true;
}
}
public void keyReleased(KeyEvent arg0) {
// solta o ctrl
if (arg0.getKeyCode() == KeyEvent.VK_CONTROL) {
this.ctrl = false;
}
}
public void keyTyped(KeyEvent arg0) {
if ((arg0.getKeyCode() == KeyEvent.VK_S) && this.ctrl) {
// SALVA AQUI
}
}
}
Opa!
Não funcionou cara..
segue:
public void keyPressed(KeyEvent arg0) {
System.out.println("Aperta o CTRL");
if (arg0.getKeyCode() == KeyEvent.VK_CONTROL) {
ctrl = true;
}
}
public void keyReleased(KeyEvent arg0) {
System.out.println("Solta o CTRL");
if (arg0.getKeyCode() == KeyEvent.VK_CONTROL) {
ctrl = false;
}
}
public void keyTyped(KeyEvent arg0) {
System.out.println(arg0.getKeyChar()+" "+arg0.getKeyCode());
if ((arg0.getKeyCode() == KeyEvent.VK_S) && ctrl) {
System.out.println("1");
}
}
Traces:
Aperta o CTRL
0
Solta o CTRL
O caracter no KeyTyped saiu como um caracter estranho e codigo 0
Abraços!
Opa!Não funcionou cara..
segue:
public void keyPressed(KeyEvent arg0) { System.out.println("Aperta o CTRL"); if (arg0.getKeyCode() == KeyEvent.VK_CONTROL) { ctrl = true; } } public void keyReleased(KeyEvent arg0) { System.out.println("Solta o CTRL"); if (arg0.getKeyCode() == KeyEvent.VK_CONTROL) { ctrl = false; } } public void keyTyped(KeyEvent arg0) { System.out.println(arg0.getKeyChar()+" "+arg0.getKeyCode()); if ((arg0.getKeyCode() == KeyEvent.VK_S) && ctrl) { System.out.println("1"); } }Traces:
Aperta o CTRL
0
Solta o CTRLO caracter no KeyTyped saiu como um caracter estranho e codigo 0
Abraços!
Verdade, ja tinha feito isso mas havia esquecido. Deu uma procurada por aqui e achei isso:
public class CtrlListener implements KeyListener {
private boolean ctrl = false;
public void keyTyped(KeyEvent arg0) {
if ((arg0.getKeyCode() == KeyEvent.VK_S) && arg0.getModifiers() == KeyEvent.CTRL_MASK) {
System.out.println("SALVA AQUI OH /o/");
}
}
}
Opa!Não funcionou cara..
segue:
public void keyPressed(KeyEvent arg0) { System.out.println("Aperta o CTRL"); if (arg0.getKeyCode() == KeyEvent.VK_CONTROL) { ctrl = true; } } public void keyReleased(KeyEvent arg0) { System.out.println("Solta o CTRL"); if (arg0.getKeyCode() == KeyEvent.VK_CONTROL) { ctrl = false; } } public void keyTyped(KeyEvent arg0) { System.out.println(arg0.getKeyChar()+" "+arg0.getKeyCode()); if ((arg0.getKeyCode() == KeyEvent.VK_S) && ctrl) { System.out.println("1"); } }Traces:
Aperta o CTRL
0
Solta o CTRLO caracter no KeyTyped saiu como um caracter estranho e codigo 0
Abraços!
Verdade, ja tinha feito isso mas havia esquecido. Deu uma procurada por aqui e achei isso:
public class CtrlListener implements KeyListener { private boolean ctrl = false; public void keyTyped(KeyEvent arg0) { if ((arg0.getKeyCode() == KeyEvent.VK_S) && arg0.getModifiers() == KeyEvent.CTRL_MASK) { System.out.println("SALVA AQUI OH /o/"); } } }
Opa.. mesmo assim não funcionou, a condição && no KeyTyped fez com que ficasse igual a sua solução anterior... ele não vai entrar nunca no sysout, pq o KeyCode nao eh a letra S
Da uma olhada em como eu fiz:
//
// Adiciona um KeyListener no textfield.
//
textfield.addKeyListener
(
new KeyAdapter()
{
public
void keyPressed(KeyEvent evt) {
KeyExec(evt.getKeyCode());
}
}
);
Depois ele chama esse método que vai fazer tudo:
/**
* Método responsável por realizar o controle total do KeyBoard para este componente.
*
* @param an_key
* Tecla pressionada do usuário
*
* OBS: A variavel ib_ctrl_pressed é iniciada de false.
*/
public
void KeyExec(int an_key)
{
//
// Verifica a tecla que foi pressionada.
//
switch (an_key)
{
case KeyEvent.VK_DOWN:
//
// Aciona a flag indicando que a tecla CTRL está solta.
//
ib_ctrl_pressed = false;
//
// Chama a função responsável por avançar uma pagina.
//
NextExec();
break;
case KeyEvent.VK_UP:
//
// Aciona a flag indicando que a tecla CTRL está solta.
//
ib_ctrl_pressed = false;
//
// Chama a função responsável por voltar uma pagina.
//
PreviousExec();
break;
case KeyEvent.VK_CONTROL:
//
// Aciona a flag indicando que a tecla CTRL está pressionada.
//
ib_ctrl_pressed = true;
break;
case KeyEvent.VK_S:
//
// Verifica se a tecla CTRL está pressionada.
//
if (ib_ctrl_pressed)
{
//
// Chama a função responsável por Salvar as alterações na base.
//
SaveExec();
}
//
// Aciona a flag indicando que a tecla CTRL está solta.
//
ib_ctrl_pressed = false;
break;
case KeyEvent.VK_A:
//
// Verifica se a tecla CTRL está pressionada.
//
if (ib_ctrl_pressed)
{
//
// Chama a função de adicionar uma pagina.
//
AddExec();
}
//
// Aciona a flag indicando que a tecla CTRL está solta.
//
ib_ctrl_pressed = false;
break;
case KeyEvent.VK_E:
//
// Verficia se a tecla CTRL está pressionada.
//
if (
ib_ctrl_pressed
)
{
//
// Chama a função de remover uma pagina.
//
RemoveExec();
}
break;
default:
//
// Aciona a flag indicando que a tecla CTRL está solta.
//
ib_ctrl_pressed = false;
break;
}
}
Será que isso é uma maneira horrivel de programação?
Opa!Não funcionou cara..
segue:
public void keyPressed(KeyEvent arg0) { System.out.println("Aperta o CTRL"); if (arg0.getKeyCode() == KeyEvent.VK_CONTROL) { ctrl = true; } } public void keyReleased(KeyEvent arg0) { System.out.println("Solta o CTRL"); if (arg0.getKeyCode() == KeyEvent.VK_CONTROL) { ctrl = false; } } public void keyTyped(KeyEvent arg0) { System.out.println(arg0.getKeyChar()+" "+arg0.getKeyCode()); if ((arg0.getKeyCode() == KeyEvent.VK_S) && ctrl) { System.out.println("1"); } }Traces:
Aperta o CTRL
0
Solta o CTRLO caracter no KeyTyped saiu como um caracter estranho e codigo 0
Abraços!
Verdade, ja tinha feito isso mas havia esquecido. Deu uma procurada por aqui e achei isso:
public class CtrlListener implements KeyListener { private boolean ctrl = false; public void keyTyped(KeyEvent arg0) { if ((arg0.getKeyCode() == KeyEvent.VK_S) && arg0.getModifiers() == KeyEvent.CTRL_MASK) { System.out.println("SALVA AQUI OH /o/"); } } }Opa.. mesmo assim não funcionou, a condição && no KeyTyped fez com que ficasse igual a sua solução anterior... ele não vai entrar nunca no sysout, pq o KeyCode nao eh a letra S
Da uma olhada em como eu fiz:
// // Adiciona um KeyListener no textfield. // textfield.addKeyListener ( new KeyAdapter() { public void keyPressed(KeyEvent evt) { KeyExec(evt.getKeyCode()); } } );Depois ele chama esse método que vai fazer tudo:
/** * Método responsável por realizar o controle total do KeyBoard para este componente. * * @param an_key * Tecla pressionada do usuário * * OBS: A variavel ib_ctrl_pressed é iniciada de false. */ public void KeyExec(int an_key) { // // Verifica a tecla que foi pressionada. // switch (an_key) { case KeyEvent.VK_DOWN: // // Aciona a flag indicando que a tecla CTRL está solta. // ib_ctrl_pressed = false; // // Chama a função responsável por avançar uma pagina. // NextExec(); break; case KeyEvent.VK_UP: // // Aciona a flag indicando que a tecla CTRL está solta. // ib_ctrl_pressed = false; // // Chama a função responsável por voltar uma pagina. // PreviousExec(); break; case KeyEvent.VK_CONTROL: // // Aciona a flag indicando que a tecla CTRL está pressionada. // ib_ctrl_pressed = true; break; case KeyEvent.VK_S: // // Verifica se a tecla CTRL está pressionada. // if (ib_ctrl_pressed) { // // Chama a função responsável por Salvar as alterações na base. // SaveExec(); } // // Aciona a flag indicando que a tecla CTRL está solta. // ib_ctrl_pressed = false; break; case KeyEvent.VK_A: // // Verifica se a tecla CTRL está pressionada. // if (ib_ctrl_pressed) { // // Chama a função de adicionar uma pagina. // AddExec(); } // // Aciona a flag indicando que a tecla CTRL está solta. // ib_ctrl_pressed = false; break; case KeyEvent.VK_E: // // Verficia se a tecla CTRL está pressionada. // if ( ib_ctrl_pressed ) { // // Chama a função de remover uma pagina. // RemoveExec(); } break; default: // // Aciona a flag indicando que a tecla CTRL está solta. // ib_ctrl_pressed = false; break; } }Será que isso é uma maneira horrivel de programação?
Muito estranho não funcionar pois eu fiz aqui e funcionou perfeitamente... porem estava levelemente diferente :P
public class CtrlListener implements KeyListener {
public void keyTyped(KeyEvent arg0) {
if (arg0.getKeyCode() == KeyEvent.VK_S) {//Não estou mais usando "&&".Sera que foi isso ?
if(arg0.getModifiers() == KeyEvent.CTRL_MASK){
System.out.println("SALVA AQUI OH /o/");
}
}
}
}
Comentario em tópico errado.
Desculpem.
Aqui o codigo exato que eu usei para testar:
package awt;
import java.awt.AWTEvent;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class CaptureAllEvents extends JPanel {
private static final long serialVersionUID = 4610230261671017623L;
public CaptureAllEvents() {
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
public void eventDispatched(AWTEvent event) {
KeyEvent ev = (KeyEvent) event;
if (ev.getModifiers() == KeyEvent.CTRL_MASK) {
if (ev.getKeyCode() == KeyEvent.VK_S) {
System.out.println("salva");
}
}
}
}, AWTEvent.KEY_EVENT_MASK);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setContentPane(new CaptureAllEvents());
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Nossa!
Funcionou perfeito!!.. mas, você sabe pq ele entra no sysout 2 vezes ?
Desculpe,
Já que eu postei errado acima… vou falar uma saida para você.
Coloque este código:
//
// Faz a verificação se for um evento de tecla pressionada.
//
if (
ev.getID() == KeyEvent.KEY_PRESSED
)
{
}
antes de fazer o isto:
KeyEvent
ev = (KeyEvent) event;
Pronto… jogue o resto de sua codificação dentro do IF.
FUNCIONOU! OBRIGADO A VCS 2!