JPasswordField焦点问题

时间:2011-09-07 20:16:34

标签: java swing focus jpasswordfield

我在http://download.oracle.com/javase/tutorial/uiswing/components/passwordfield.html

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

它有三个组成部分,

  1. JTextField获取用户名
  2. JPasswordField获取密码
  3. JButton登录
  4. 然后,当应用程序启动时,JPanel会显示在JFrame中。问题是,我发现如果我先点击密码字段,我可以输入密码而没有问题。但是如果我先输入用户名,那么我就无法在密码字段中输入任何内容。谁知道这里可能出了什么问题?

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

    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();
                }
            });
        }
    }
    

1 个答案:

答案 0 :(得分:0)

  

问题中描述没有问题。这很好用。输入用户名和密码后,单击“登录”,即可打印给定的用户名和密码。