Olá galera
Eu preciso do seguinte e nao encontrei uma solução
Eu preciso que ao apertar a tecla ENTER a aplicação executara o JButton do frame mesmo ele nao estando em foco.
Quem puder ajudar ^^
Atenciosamente
Olá galera
Eu preciso do seguinte e nao encontrei uma solução
Eu preciso que ao apertar a tecla ENTER a aplicação executara o JButton do frame mesmo ele nao estando em foco.
Quem puder ajudar ^^
Atenciosamente
Acho que você quer o seguinte. Usuário digita um texto no JTextField e dá um enter. Quando ele pressionar o enter ele faz a mesma ação do JButton. É isso? Se for basta adicionar o KeyListener ao JTextField ou no componente em questão.
Opa Daniels
Deu certinho
Era uma tela com login, com user e password, eu adicionei o KeyListener neles e deu certo ^^
Eu tava adicionando o KeyListener no JButton =X por isso nao tava dando certo hehehe
Obrigado =)
O próprio ActionListener poderia fazer isso pra você, tão utilizado nos JButtons da vida…
fica ai a dica,
Diego.
E se ele tivesse uns 20 componentes, com textfields, comboboxes, lists, etc?
Tem maneiras mais fáceis e melhores de fazer isso.
a) Se você quer acionar um só um botão padrão, no construtor do seu JFrame faça:
getRootPane().setDefaultButton(seuBotaoPadrao);
A vantagem é que o botão será desenhado com uma borda mais forte, indicando que ele é o padrão. O padrão é acionado sempre que o usuário pressiona enter. No seu caso, é a abordagem mais indicada.
b) Se são uma série de botões, como no caso dos números de uma calculadora, use o InputMap e o ActionMap:
http://www.guj.com.br/posts/list/140986.java
A vantagem desses métodos é que, caso você precise colocar mais um JTextField na tela, você não precisará lembrar-se de adicionar um listener nele. É especialmente prático caso você tenha vários botões (como no caso da calculadora), ou vários campos, como num formulário. Eles também funcionam caso nenhum JTextField tenha o foco.
Eu recomendo fortemente que você apague esses keylisteners e defina o botão como padrão. O código fica mais limpo e o desenho do form mais consistente.
viny eu tentei fazer o seu método só que não deu certo
Olha do jeito q eu fizpublic void initialize(){
this.setSize(350,230);
this.setContentPane(getContainer());
getRootPane().setDefaultButton(btn);
this.setVisible(true);
this.setTitle("Login");
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setModal(false);
}
O que eu tenho que fazer?
O que não deu certo? Deu erro? Não fez nada? O que houve?
Você tem certeza que a variável btn não está nula nesse momento?
Tipo ela não esta nula não
Acontece o seguinte, quando eu pressiono o ENTER, o JButton até é pressionado, mais o evento que tem nele não é executado
Põe seu código todo aí. Se for muito longo, põe nos attachments.
package gui;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import business.Login;
import database.LoginDB;
public class LoginGUI extends JDialog implements MouseListener{
private static final long serialVersionUID = 1L;
private JPanel container = null;
private JPanel panelLogin = null;
private JButton btn = null;
private JLabel lUsuario = null;
private JLabel lSenha = null;
private JTextField txtUsuario = null;
private JPasswordField txtSenha = null;
LoginGUI(){
super();
initialize();
}
public void initialize(){
this.setSize(350,230);
this.setContentPane(getContainer());
getRootPane().setDefaultButton(btn);
this.setVisible(true);
this.setTitle("Login");
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setModal(false);
}
public JPanel getContainer(){
if(container == null){
container = new JPanel();
container.setLayout(null);
container.add(getPanelLogin());
}
return container;
}
public JPanel getPanelLogin(){
if(panelLogin == null){
TitledBorder t = new TitledBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Login"));
panelLogin = new JPanel();
panelLogin.setLayout(null);
panelLogin.setBounds(10, 10, 320, 180);
panelLogin.setBorder(t);
panelLogin.setVisible(true);
lUsuario = new JLabel();
lUsuario.setBounds(30, 50, 50, 29);
lUsuario.setText("Admin");
panelLogin.add(lUsuario);
lSenha = new JLabel();
lSenha.setBounds(30, 90, 50, 29);
lSenha.setText("Senha");
panelLogin.add(lSenha);
txtUsuario = new JTextField();
txtUsuario.setBounds(110, 41, 170, 30);
panelLogin.add(txtUsuario);
txtSenha = new JPasswordField();
txtSenha.setBounds(110, 80, 170, 31);
panelLogin.add(txtSenha);
btn = new JButton();
btn.setBounds(110, 130, 94, 20);
btn.setText("Entrar");
btn.addMouseListener(this);
panelLogin.add(btn);
}
return panelLogin;
}
public static void main(String args[]){
LoginGUI l = new LoginGUI();
}
public void mouseClicked(MouseEvent e) {
if(e.getSource() == btn){
Login l = new Login();
l.setUser(txtUsuario.getText());
l.setSenha(txtSenha.getText());
if(new LoginDB().validarLogin(l) != 0){
try {
this.dispose();
MenuPrincipal m;
m = new MenuPrincipal(l.getUser(), l.getUser(), l.getSenha());
m.setExtendedState(JFrame.MAXIMIZED_BOTH);
m.setVisible(true);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
else
{
JOptionPane.showMessageDialog(null,
"Usuário ou senha inválidos. Favor digitar um usuário e uma senha correta", "Aviso", JOptionPane.WARNING_MESSAGE);
}
}
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
ta ae =)
Cara, vc tem que adicionar um ActionListener no seu JButton, não um MouseListener.
Faz assim, tira fora o “implements MouseListener” do seu JFrame.
E daí, no lugar de:
btn.addMouseListener(this);
Faça:
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
efetuarLogin();
}
});
E daí deixa o método efetuarLogin assim:
public void efetuarLogin() {
Login l = new Login();
l.setUser(txtUsuario.getText());
l.setSenha(txtSenha.getText());
if(new LoginDB().validarLogin(l) == 0){
JOptionPane.showMessageDialog(null,
"Usuário ou senha inválidos. Favor digitar um usuário e uma senha correta", "Aviso", JOptionPane.WARNING_MESSAGE);
return;
}
try {
this.dispose();
MenuPrincipal m = new MenuPrincipal(l.getUser(), l.getUser(), l.getSenha());
m.setExtendedState(JFrame.MAXIMIZED_BOTH);
m.setVisible(true);
} catch (IOException e1) {
throw new RuntimeException(e1.getMessage(), e1);
}
}
Deu certo Vini
Obrigado
Vou pedir uma dica, eu estou trabalhando sempre com MouseListener, qual é melhor o MouseListener ou o ActionListener?
E se ele tivesse uns 20 componentes, com textfields, comboboxes, lists, etc?
Tem maneiras mais fáceis e melhores de fazer isso.
Concordo, mas pela dúvida deduzi que seria apenas um JTextField, então indiquei a solução mais simples.
Tipicamente, implementa-se botões com o ActionListener.
A “action” é a ação que um componente deveria fazer ao ser “ativado”. A ativação do botão pode ser via mouse ou teclado, no pressionamento de uma tecla de hint, por exemplo.
O “mouse” listener trata apenas de eventos do mouse. Por isso, o enter disparou a ação do botão, mas não o mouse listener, já que enter é uma tecla de teclado.
HUmm
Entendi vini
Obrigado pela aula =)
Atenciosamente
De nada, foram 2 problemas resolvidos pelo preço de 1.
Além do MouseListener, há também o KeyListener, para quando você só quiser ouvir eventos de teclado.