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