在以下代码中,如果我调用password.setEchoCar(char)方法,该文件将正常运行。在其上方创建对象时,为什么不能调用它?
应该有范围问题,我检查了javadoc的方法,这似乎是指定非默认密码字符的正确方法。
谢谢
import javax.swing.*;
public class Authenticator extends javax.swing.JFrame {
JTextField username = new JTextField(15);
JPasswordField password = new JPasswordField(15);
password.setEchoChar('%');
JTextArea comments = new JTextArea(4, 15);
JButton ok = new JButton("OK");
JButton cancel = new JButton("Cancel");
public Authenticator () {
super("Account Information");
setSize(300, 220);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane = new JPanel();
JLabel usernameLabel= new JLabel("Username: ");
JLabel passwordLabel = new JLabel("Password: ");
JLabel commentsLabel = new JLabel("Comments: ");
comments.setLineWrap(true);
comments.setWrapStyleWord(true);
pane.add(usernameLabel);
pane.add(username);
pane.add(passwordLabel);
pane.add(password);
pane.add(commentsLabel);
pane.add(comments);
pane.add(ok);
pane.add(cancel);
add(pane);
setVisible(true);
}
private static void setLookAndFeel() {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
}
public static void main(String[] arguments) {
Authenticator.setLookAndFeel();
Authenticator auth = new Authenticator();
}
}
最佳答案
您正在尝试在可执行上下文之外(在变量清零区域内)执行代码...
public class Authenticator extends javax.swing.JFrame {
JTextField username = new JTextField(15);
JPasswordField password = new JPasswordField(15);
password.setEchoChar('%');
//...
public Authenticator () {
//...
将
password.setEchoChar('%');
移至构造函数public class Authenticator extends javax.swing.JFrame {
JTextField username = new JTextField(15);
JPasswordField password = new JPasswordField(15);
//...
public Authenticator () {
super("Account Information");
password.setEchoChar('%');
//...