在下面的代码中,如果我调用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();
}
}
答案 0 :(得分:5)
您正尝试执行可执行上下文的代码(在变量decleration区域内)...
java.security
将public class Authenticator extends javax.swing.JFrame {
JTextField username = new JTextField(15);
JPasswordField password = new JPasswordField(15);
password.setEchoChar('%');
//...
public Authenticator () {
//...
移至构造函数
password.setEchoChar('%');
答案 1 :(得分:0)
JPasswordField password = new JPasswordField(15);
{
password.setEchoChar('%');
}
您可以在initializer block中执行此操作,但除非您拥有许多构造函数通用的初始化代码,否则在构造函数中执行此操作会被视为好的样式。