Terryl
Terryl

Reputation: 153

Java Object Method Not Accessible

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

Answers (2)

Mike Samuel
Mike Samuel

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

MadProgrammer
MadProgrammer

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

Related Questions