【问题标题】:JPasswordField focus issueJPasswordField 焦点问题
【发布时间】:2011-09-07 20:16:33
【问题描述】:

我在http://download.oracle.com/javase/tutorial/uiswing/components/passwordfield.html的demo之后写了一个非常简单的登录JPanel

它包含三个组件,

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

【问题讨论】:

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

标签: java swing focus jpasswordfield


【解决方案1】:

没有问题中描述的问题。这工作正常。输入用户名和密码后,单击登录,将打印给定的用户名和密码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2014-02-15
    相关资源
    最近更新 更多