我在http://download.oracle.com/javase/tutorial/uiswing/components/passwordfield.html
中的演示之后写了一个非常简单的登录JPanel它有三个组成部分,
然后,当应用程序启动时,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();
}
});
}
}
答案 0 :(得分:0)
问题中描述没有问题。这很好用。输入用户名和密码后,单击“登录”,即可打印给定的用户名和密码。