从外部更改 TabbedPane 索引 class

Changing a TabbedPane index from an outer class

我在 class 中有一个名为 App 的 TabbedPane,我想 运行 这个 class 中的一个方法。我从 class Login 添加了两个带有 JPanel 的选项卡和一个空选项卡。这是 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
}

}

现在我想 运行 从外部 class 调用一个名为 changeFocus() 的方法。 A 向 Login class 添加了一个 actionListener,其构造函数如下:

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

现在我问为什么这不起作用,changeFocus() 必须是 static。如果我将其更改为 static 为什么 JTabbedPane 不能是静态的并抛出错误。

只需将 App 作为参数传递给 Login 的构造函数:

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

然后:

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