Java JPasswordField焦点问题

Java JPasswordField焦点问题,java,swing,focus,jpasswordfield,Java,Swing,Focus,Jpasswordfield,在中的演示之后,我编写了一个非常简单的登录JPanel 它有三个组成部分 获取用户名的JTextField JPasswordField以获取密码 JButton登录 然后,当应用程序启动时,JFrame中会显示JPanel。问题是,我发现如果我首先单击密码字段,我可以毫无问题地输入密码。但是,如果我先输入用户名,则无法在密码字段中输入任何内容。有人知道这里可能出了什么问题吗 这是我为登录面板编写的代码,可以编译和运行此代码,但无法输入密码。我错过了什么吗 import javax.swing.

在中的演示之后,我编写了一个非常简单的登录JPanel

它有三个组成部分

  • 获取用户名的JTextField
  • JPasswordField以获取密码
  • JButton登录
  • 然后,当应用程序启动时,JFrame中会显示JPanel。问题是,我发现如果我首先单击密码字段,我可以毫无问题地输入密码。但是,如果我先输入用户名,则无法在密码字段中输入任何内容。有人知道这里可能出了什么问题吗

    这是我为登录面板编写的代码,可以编译和运行此代码,但无法输入密码。我错过了什么吗

    import javax.swing.*;
    import javax.swing.border.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.Arrays;
    
    public class Logon extends javax.swing.JPanel implements ActionListener {
    
        private JTextField fldName;
        private JPasswordField fldPasswd;
        private JButton btnLogon;
    
        public Logon() {
    
            JLabel labTitle = new JLabel("title");
            labTitle.setText("EMT Monitor v.1.0");
    
            // username
            fldName = new JTextField(10);
            JLabel labName = new JLabel("Username");
            labName.setText("Username:");
            labName.setLabelFor(fldPasswd);
    
            // passwd
            fldPasswd = new JPasswordField(10);
            fldPasswd.setActionCommand("Logon");
            fldPasswd.addActionListener(this);
            fldPasswd.requestFocusInWindow();
    
            JLabel labPasswd = new JLabel("Password");
            labPasswd.setText("Password:");
            labPasswd.setLabelFor(fldPasswd);
    
            // botten
            btnLogon = new JButton("Logon");
            btnLogon.setActionCommand("Logon");
            btnLogon.addActionListener(this);
    
    
            JPanel mainPanel = new JPanel();
    
    
            btnLogon.setPreferredSize(new Dimension(200, 30));
    
            mainPanel.setPreferredSize(new Dimension(340, 190));
    
            mainPanel.add(labName);
            mainPanel.add(fldName);
            mainPanel.add(labPasswd);
            mainPanel.add(fldPasswd);
            mainPanel.add(btnLogon);
    
            JPanel outPanel = new JPanel();
            outPanel.setPreferredSize(new Dimension(400, 300));
            outPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
    
            outPanel.add(mainPanel);
            add(outPanel);
    
            setAlignmentX(Component.CENTER_ALIGNMENT);
            setAlignmentY(Component.CENTER_ALIGNMENT);
            setVisible(true);
        }
    
    
    
    public void actionPerformed(ActionEvent e) {
            String cmd = e.getActionCommand();
    
            if (cmd.equals("Logon")) { //Process the password.
    
                String user = fldName.getText();
                String passwd = new String(fldPasswd.getPassword());
    
                System.out.println(user + " " + passwd);
    
    
            }
    
    
        }
    
        private static void createAndShowGUI() {
            //Create and set up the window.
            JFrame frame = new JFrame("Logon");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            //Create and set up the content pane.
            final Logon newContentPane = new Logon();
            newContentPane.setOpaque(true); //content panes must be opaque
            frame.setContentPane(newContentPane);
    
            //Display the window.
            frame.pack();
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            //Schedule a job for the event dispatch thread:
            //creating and showing this application's GUI.
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    //Turn off metal's use of bold fonts
            UIManager.put("swing.boldMetal", Boolean.FALSE);
            createAndShowGUI();
                }
            });
        }
    }
    
    不存在问题中描述的问题。这个很好用。输入用户名和密码并单击登录后,将打印给定的用户名和密码


    您的程序代码中有一个bug。听起来很不寻常。如果您发布您编写的代码,这将帮助我们找出问题所在。这听起来很不寻常,好像你在某处使用了错误的变量或方法。你的代码不会编译,但当代码被修复,可以编译时,它不会显示你所描述的异常行为。这对我来说很好。请告诉我们更多。在创建登录面板并将其添加到jframe之后,我找到了一个解决方案。调用logonpanel.requestFocusInWindow(),然后它就可以运行了。