Pessoal, estou querendo interseptar o botao x do meu jPanel para que seja realizadas algumas funcoes antes de fecha-lo.
Alguem poderia me ajudar…
Obrigado
Gustavo.
Pessoal, estou querendo interseptar o botao x do meu jPanel para que seja realizadas algumas funcoes antes de fecha-lo.
Alguem poderia me ajudar…
Obrigado
Gustavo.
Tenta isso :
JFrame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent evt)
{
Comandos
System.exit(0); //Fecha Tela
}
});
[]´s
Muito obrigado… nao me lembrava deste método.
Estou com uma outra duvida… gostaria de colocar um addkeyListener no frame fazendo com que quando o usuario aperte Esc o Frame feche… e tb estou querendo deixar um botao com Default, fazendo com que quando aperte a tecla Enter acione o botao Default… jah tentei com o setDefaultCapable mas nao deu certo…
Obrigado.
Gustavo
Enter no botao:
SeuBotao.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent evt)
{
int intKey = evt.getKeyCode();
if (intKey == KeyEvent.VK_ENTER) Comandos ...
}
});
Fechar Frame com o ESC:
JFrame.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent evt)
{
int intKey = evt.getKeyCode();
if (intKey == KeyEvent.VK_ESC) System.exit(0);
}
});
Nao sei se o esquema do ESC está certo. Testa ae, fiz de cabeça.
[]´s
Entao Thiago, eu já tinha feito istoque vc disse… adicionando um keyListener no meu panel mas tinha obtive êxito… não sei porque ele nao escuta o teclado… ???
O que vc acha que pode estar acontecendo…
Obrigado
Gustavo.
Voce tem que colocar no JFrame e não no JPanel.
Muda ae. Fim de expediente!
Até segunda.
[]´s
amigo galvim…vc não deve colocar o ouvinte no JPanel, a nao ser que queira fazer algo muito específico…pelo que nosso amigo Rani te passou, acredito que nao tenha mais nenhum codigo que eu possa te passar…implemente o ouvinte no JFrame, pois, quando o usuário for fechar o JFrame algo irá acontecer…por exemplo, vc pode colocar uma mensagem para saber se o usuário realmente deseja sair…vc pode testar ver se há ainda algum JInternalFrame, no caso de estar fazendo uma aplicação com menus, para testar se há algum aberto ainda…mas faça conforme o amigo Thiago passou, vai dar certo…!!
Ate mais…
Ola,
Eu acho que colocar o listener no JFrame tb não vai funcionar.
Vc terá que usar :
java.awt.Toolkit.addAWTEventListener(AWTEventListener listener, long eventMask)
[]'s
E ae lopes, beleza?
No JInternalFrame funciona, será que no JFrame não?
Voce já fez o teste?
[]´s
Bom,
Não funciona, ou pelo menos não sempre.
A melhor solução talvez seja:
protected void processKeyEvent(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
System.exit(0);
}
super.processKeyEvent(e);
}
No JFrame.
[]'s
Fala ae pessoal… estou tentando fazer o que vcs disseram…
Eu estou usando JDialog… e todas os meus paineis estao praticamente desta seguinte maneira…
Dêem uma olhada no codigo… eu tentei mudar para Jframe mas dá uns pau… o que eu estou fazendo de errado…
[code] class SelectNameWindow extends JDialog implements ActionListener
{
JLabel lbName;
JTextField txtName;
// JFrame panel;
JPanel panel;
JButton btOk, btCancel;
static String viewName;
String user;
SelectNameWindow(String user)
{
super(new Frame(), "Painel de Controle", true);
this.user = user;
viewName = "";
lbName = new JLabel("Nome da Seleção: ");
lbName.setBounds(30,20,200,20);
txtName = new JTextField(new ControlText(50),"",50);
txtName.setBounds(30,50,200,20);
btOk= new JButton("Ok");
btOk.setBounds(270,30,90,30);
btCancel = new JButton("Cancelar");
btCancel.setBounds(270,70,90,30);
btOk.addActionListener(this);
btCancel.addActionListener(this);
panel = new JFrame();
panel = new JPanel();
panel.setLayout(null);
panel.add(lbName);
panel.add(txtName);
panel.add(btCancel);
panel.add(btOk);
/* panel.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent evt)
{
int intKey = evt.getKeyCode();
if (intKey == KeyEvent.VK_ESCAPE)
{
System.exit(0);
}
}
});
*/
setContentPane(panel);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
viewName = "";
dispose();
}
});
/*
btOk.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent evt)
{
int intKey = evt.getKeyCode();
if (intKey == KeyEvent.VK_ENTER)
System.out.println("teste");
}
});
*/
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
//addWindowListener(new WindowKeeper());
setSize(450,170);
show();
}
[/code]
Ola,
Eu tentei con VK_ESCAPE e não está dando certo tb. O máximno que consegui até agora foi usando outra tecla. Exemplo:
package com.mlopes.examples.guj;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class SelectNameWindow
extends JInternalFrame
implements ActionListener
{
static String viewName;
JButton btCancel;
JButton btOk;
JLabel lbName;
JPanel panel;
JTextField txtName;
String user;
Action closeWindow;
SelectNameWindow(String user)
{
super("Painel de Controle", true, true, true, true);
this.user = user;
viewName = "";
closeWindow = new AbstractAction("Cancel") {
public void actionPerformed(ActionEvent e) {
doDefaultCloseAction();
}
};
lbName = new JLabel("Nome da Seleção: ");
txtName = new JTextField();
txtName.setColumns(40);
btOk = new JButton("Ok");
btCancel = new JButton(closeWindow);
btOk.addActionListener(this);
panel = new JPanel(new BorderLayout());
JPanel buttonPanel = new JPanel(new GridLayout(1,2));
buttonPanel.add(btCancel);
buttonPanel.add(btOk);
JPanel northPanel = new JPanel(new FlowLayout());
northPanel.add(lbName);
northPanel.add(txtName);
JPanel southPanel = new JPanel(new BorderLayout());
southPanel.add(buttonPanel, BorderLayout.EAST);
panel.add(northPanel, BorderLayout.NORTH);
panel.add(southPanel, BorderLayout.SOUTH);
setContentPane(panel);
setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
this.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
System.out.println(e);
}
public void keyPressed(KeyEvent e) {
System.out.println(e);
}
public void keyReleased(KeyEvent e) {
System.out.println(e);
}
});
getInputMap(WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0), "closeWindow");
getActionMap().put("closeWindow", closeWindow);
pack();
}
public void actionPerformed(ActionEvent e) {
// sei la
}
}
Se conseguir de outro jeito eu aviso.
[]'s
mLopes,
muito obrigado, mas eu tenho que usar JDialog por causa da minha aplicação, não tem como utilizar JInternalFrame pq terei que mudar muita coisa, a forma de adicionar ele eh diferente e vai dar uns paus, segundo o meu amigo aqui. Ele tb já tentou utilizar o jInternalFrame na nossa aplicação e ele chegou na conclusao que temos que utilizar JDialog mesmo.
Acho que nao vai valer a pena mudar todo o codigo, nossa aplicação esta praticamente pronta… soh esta faltanto alguns detalhes como dar um dispose na tela com esc e deixar os botoes de Ok como Default. …
… não sei pq que nao da certo com JDialog. ???
se vc conseguir algo me da um alo
[]'s
Gustavo
Caro colega tb tava com essa dúvida. Estou começando agora em java e uso o NetBeans. Não estou criando meus formulários dinamicamente, uso a interface gráfica mesmo. Eu o seguinte.
Crie um metodo para fechar o formulario principal
private void fechar() {
if(javax.swing.JOptionPane.showConfirmDialog(null,“Deseja sair do sistema”,"ATENÇÂO ",javax.swing.JOptionPane.YES_NO_OPTION )==0){
dispose();
}
}
Esse metodo eu chamo no botão fechar que coloquei no formulario principal. No envento ActionPerformed do botão.
E no formulario na propriedade "defaultCloseOperation" eu mudei para DO_NOTHING, ate agora funcionou. Quando clico no botao X do form, não acontece nada. Quando clico no botão fechar que coloquei no formulário me vem a mensagem e escolho entre fechar ou não (yes / no).
Acho que era isso que queria…