Reputation: 153
In the following code, the file runs fine if I take the password.setEchoCar(char) method call out. Why can I not call it when the object is created right above it?
There shoudlnt be a scope problem and I checked the javadoc for the method, it seems to be the correct method for specifying a non-default password character.
Thanks
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();
}
}
Upvotes: 2
Views: 1359
Reputation: 120526
JPasswordField password = new JPasswordField(15);
{
password.setEchoChar('%');
}
You can do that in an initializer block, but unless you have initialization code that is common to a number of constructors, it's considered good style to do it in the constructor.
Upvotes: 0
Reputation: 347314
You're trying to execute code out side of an executable context (within the variable decleration area)...
public class Authenticator extends javax.swing.JFrame {
JTextField username = new JTextField(15);
JPasswordField password = new JPasswordField(15);
password.setEchoChar('%');
//...
public Authenticator () {
//...
Move password.setEchoChar('%');
to the constructor
public class Authenticator extends javax.swing.JFrame {
JTextField username = new JTextField(15);
JPasswordField password = new JPasswordField(15);
//...
public Authenticator () {
super("Account Information");
password.setEchoChar('%');
//...
Upvotes: 5