Pascal
Pascal

Reputation: 66

Changing a TabbedPane index from an outer class

I have a TabbedPane in a class called App and i want to run a method in this class. I added two tabs with a JPanel from the class Login and an empty one. Here is the class:

public class App {
private static JTabbedPane tabbedPane;
public JPanel mainPanel;

public App(){
    tabbedPane.addTab("Login", new Login().mainPanel);
    tabbedPane.addTab("test", new JPanel());
    changeFocus(0);
}

public void changeFocus(int i){
    //CODE HERE
}

}

Now i want to run a method called changeFocus() from an outer class. A added an actionListener to the Login class with a constructor like this:

public Login() {
        logInButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
               App.changeFocus(1);
            }
        });
    }

Now i ask why this doesn´t work and changeFocus() must be static. And if i change it to static why the JTabbedPane cannot be static and throws out an error.

Upvotes: 0

Views: 45

Answers (1)

George Z.
George Z.

Reputation: 6818

Simply pass App as an argument to Login's constructor:

 tabbedPane.addTab("Login", new Login(this).mainPanel);

and then:

public Login(App app) {
    logInButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
           app.changeFocus(1);
        }
    });
}

Upvotes: 1

Related Questions