Como fechar um JInternalFrame usando a tecla ESC

7 respostas
YuriSilva

Olá pessoal.
Estou com um problema, estou tentando fechar um JInternalFrame usando a tecla ESC mais não fecha por nada.
Estou utilizando este código abaixo, agradeço desde já pela atenção.
Abraço.

public void keyPressed(KeyEvent e) {

  this.addKeyListener(new KeyAdapter()
  {
   public void keyPressed(KeyEvent evt){
   int intKey = evt.getKeyCode();
   if (intKey == KeyEvent.VK_ESCAPE){ 
   System.exit(0);
   }
  }
  });

7 Respostas

TangZero

Olá,

extenda a classe JInternalFrame e implemente a interface KeyListener…
creio que esse seja o melhor caminho…

YuriSilva
TangZero:
Olá,

extenda a classe JInternalFrame e implemente a interface KeyListener....
creio que esse seja o melhor caminho...

Na verdade já estou fazendo isto, está desta forma abaixo:
public class ProdutoEmbalagemNova extends JInternalFrame implements KeyListener {

(.........)

/**
* This is the xxx default constructor
* @throws PropertyVetoException
* @throws SQLException
*/
public ProdutoEmbalagemNova(){
super();
initialize();
this.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent evt){
int intKey = evt.getKeyCode();
if (intKey == KeyEvent.VK_ESCAPE){
System.exit(0);
dispose();
System.out.println("teste");
}
}
});

}

(.......)
}
YuriSilva

E ae galera, ninguém tem um idéia para ajudar.
Valew, abraço.

RenataFA

Olha,,, eu não sei exatamente resolver seu problema, mas tenho algo aqui que talvez te dê umas idéias...

Aqui eu tenho aquele esqueminha em que se relaciona um botão a uma tecla de atalho. Por ex, se eu pressionar F2 nas minhas telas, ele aciona o botão de pesquisa. Veja como fizemos isso no código:

Logo depois de iniciar o botão, implementamos da seguinte forma:

btnPesquisar.addActionListener(meuListener);

btnPesquisar.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F2"), "actionName");
btnPesquisar.getActionMap().put("actionName",
        new AbstractAction("actionName") {
            public void actionPerformed(ActionEvent evt) {
                meuListener.actionPerformed(evt);
            }
        }
    );

Tente fazer algo parecido com seu JInternalFrame, ou seja, tente implementar nele esse esquema que eu implementei no botão. Ai, no seu caso, quando vc pegar a ação vc pode ou invocar seu botão de sair (ou qq opção de sair que vc tenha) ou tentar chamar direto um this.dispose().

Bem, boa sorte, depois me diga se deu certo! :wink:

YuriSilva

Olá Renata.

Deu certo sim, fiz da mesma forma que você me disse só adaptei o código que você me passou e deu certo sim. :slight_smile:

Obrigado pela dica.
:slight_smile:

root_

Yuri, como foi a adaptaçao que vc fez, se puder esclarecer pra nós… estou tb fazendo algo do mesmo genero! Quero usar as F1, F2, F3… para executar açoes, independente do componente q esteja em foco.

Agradeço desde ja!

renzonuccitelli
public class Formulario<E extends Codificavel> extends JInternalFrame {
	private JBeanPanel<E> form;
	private JPanel painel;
	private JPanel painelBotoes;
	private Class<E> clazz;
	static private Map<Class<? extends Codificavel>,String> xmlConfgPath=null;
	private JActButton botaoCadastrar;
	
	
	
	
	protected Formulario(Class<E > clazz,String titulo){
		super(titulo,true,true,true,true);
		this.getActionMap().put("cadastrar", new AbstractAction(){
			@Override
			public void actionPerformed(ActionEvent e) {
				botaoCadastrar.doClick();	
			}
			
		});
		this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),"cadastrar");
		
	}

Onde vc ve que eu coloquei o AbstractAction, vc pode colocar o que kiser. Assim todas as subclasses dessa classe responderão com a ação desejada, a menos que vc sobrescreva o construtor e não chame esse construtor da classe pai

Criado 10 de julho de 2007
Ultima resposta 27 de out. de 2008
Respostas 7
Participantes 5