Проблема фокуса JPasswordField - PullRequest
       13

Проблема фокуса JPasswordField

0 голосов
/ 08 сентября 2011

Я написал очень простой вход в JPanel после демонстрации в http://download.oracle.com/javase/tutorial/uiswing/components/passwordfield.html

, в котором есть три компонента:

  1. JTextField для получения имени пользователя
  2. JPasswordField для полученияпароль
  3. JButton для входа в систему

, затем 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 голосов
/ 08 декабря 2011

Нет проблем, как описано в вопросе. Это отлично работает. После того как вы введете имя пользователя и пароль и нажмете кнопку «Вход», будут напечатаны имя пользователя и пароль.

...