首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关注Keylistener

关注Keylistener
EN

Stack Overflow用户
提问于 2013-11-30 05:19:10
回答 2查看 443关注 0票数 0

所以我得到的是,我想尝试并制作一个小登录小程序。我正在使用Java Windowsbuilder来实现它,让它对我来说更容易。我希望代码不会太乱,因为我只是个初学者。

我遇到的问题是,我的JButton“登录”只有在它被选中的时候,或者当你第一次点击它时,才会注册一个键事件。我想要的是只需按下"ENTER“键就可以使用该按钮。

希望你们能解决我的问题:)

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import org.eclipse.wb.swing.FocusTraversalOnArray;
import java.awt.Component;
import java.awt.event.KeyAdapter;

public class nummer1 extends JFrame{

private JPanel contentPane;
public static nummer1 theFrame;
private JTextField textFieldUsername;
private JTextField textFieldPass;
private nummer1  me;
private JLabel lblCheck;
private String password = "test", username = "test";

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                nummer1 frame = new nummer1();
                nummer1.theFrame = frame;
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
public void Check(){
    String Pass = textFieldPass.getText();
    String Username = textFieldUsername.getText();

    System.out.println(Pass);

    if (Pass.equals(password) && Username.equals(username)){

        lblCheck.setText("Correct Login");

    }else{

        lblCheck.setText("Invalid username or password");

    }
}



/**
 * Create the frame.
 */
public nummer1() {
    me = this;

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 356, 129);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);


    JLabel lblUsername = new JLabel("Username:");
    lblUsername.setBounds(10, 11, 61, 14);
    contentPane.add(lblUsername);

    JLabel lblPassword = new JLabel("Password:");
    lblPassword.setBounds(10, 36, 61, 14);
    contentPane.add(lblPassword);

    textFieldUsername = new JTextField();
    textFieldUsername.setBounds(81, 8, 107, 20);
    contentPane.add(textFieldUsername);
    textFieldUsername.setColumns(10);
    me.textFieldUsername = textFieldUsername;

    textFieldPass = new JTextField();
    textFieldPass.setBounds(81, 33, 107, 20);
    contentPane.add(textFieldPass);
    textFieldPass.setColumns(10);
    me.textFieldPass = textFieldPass;

    JButton btnLogin = new JButton("Login");
    contentPane.requestFocusInWindow();
    btnLogin.addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_ENTER){
                me.Check();
                System.out.println("hi");
            }
        }
    });

    btnLogin.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            me.Check();
        }
    });
    btnLogin.setBounds(198, 7, 89, 23);
    contentPane.add(btnLogin);

    JLabel lblCheck = new JLabel("");
    lblCheck.setHorizontalAlignment(SwingConstants.TRAILING);
    lblCheck.setBounds(10, 65, 264, 14);
    contentPane.add(lblCheck);
    me.lblCheck = lblCheck;
    contentPane.setFocusTraversalPolicy(new FocusTraversalOnArray(new         
            Component[]{lblUsername, lblPassword, textFieldUsername, textFieldPass,   btnLogin, lblCheck}));

}
}

谢谢你,埃米尔!

EN

回答 2

Stack Overflow用户

发布于 2013-11-30 05:25:08

我想要的是我只需按下"ENTER“键就可以使用这个按钮

听起来你想让“登录”按钮成为对话框的默认按钮。

有关问题和解决方案,请参阅Enter Key and Button

票数 2
EN

Stack Overflow用户

发布于 2015-08-14 00:03:54

使用面板时,除非面板是可聚焦的,否则KeyListeners将无法工作。您可以做的是使用面板的InputMap和ActionMap创建到Enter键的KeyBinding。

代码语言:javascript
复制
public class Sample extends JPanel{
    //Code
    Sample() {
          //More code
          this.getInputMap().put(KeyStroke.getKeyStroke((char)KeyEvent.VK_ENTER), "Enter" );
          this.getActionMap().put("Enter", new EnterAction());
    }
    private class EnterAction extends AbstractAction(){
        @Override
        public void ActionPerformed(ActionEvent e){
            //Acion
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20293489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档