如何将菜单的方法外包给一个单独的类



昨天我开始用JavaSwing编写一个程序。以前,我只用java编写小型控制台程序。

我把程序的主菜单放在与主方法不同的类中。现在我想为选项菜单添加一个按钮,并将它执行的代码放入自己的类中,这样在主菜单类中我只需要调用选项菜单方法。

在这里我被卡住了。如果我直接在主菜单的类中编写选项菜单的代码,一切都会正常工作。但是,一旦我将选项菜单的方法外包给一个单独的类,我就不能调用外包的方法。

也许你能帮我。

以下是按下选项按钮时应执行的代码:

public class CPP_Frame extends JFrame {
        JButton SettingsButton = new JButton("Options");
        SettingsButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                CPP_Frame OptionsMenu = new CPP_Frame();
                OptionsMenu.OptionsMenuLoader();
            }
        });
    }

这是选项菜单类中的代码,应该由"选项菜单加载器"调用:

public class Options_Menu extends JFrame {
    protected void OptionsMenuLoader() {
        CPP_Frame OptionsMenu = new CPP_Frame();
        OptionsMenu.setSize(new Dimension(400, 500));
        OptionsMenu.setVisible(true);
        OptionsMenu.setTitle("Options");
        OptionsMenu.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

我哪里搞错了,或者我试图编写代码的方式可能吗。我希望我已经足够详细地解释了我的问题。提前感谢。

我可以在这里看到一些潜在的问题,而且我对swing没有太多的了解,所以如果我错了,请纠正我,我只是从编程的角度来看

首先将OptionsMenuLoader()声明为受保护的方法。这意味着if只能由与其相同类中的方法调用,或者由其派生的类调用

因此,要调用OptionsMenuLoader,它必须与actionPerformed覆盖位于同一类中,或者CPP_Frame必须继承Options_Menu,我认为从您的结构来看,这是错误的。

如果这在swing格式中是可能的,那么一个解决方案将是使"OptionsMenuLoader(("成为公共

    public void OptionsMenuLoader(){
        ...
    }

其次,我不确定为什么这不会产生错误,您在OptionsMenu上调用OptionsMenuLoader(),而这看起来是正确的,您将OptionsMenu声明为CPP_Frame而不是Options_Menu类型。这不应该起作用,因为CPP_Frame没有这样的方法OptionsMenuLoader()

我认为您的目标是创建一个包含选项菜单的CPP框架。它是在单击不同CPP帧中的按钮时创建的。

在这种情况下,您必须创建一个Options_Menu动作,而不是CPP帧。然后,您可以在此新菜单上调用OptionsMenu.OptionsMenuLoader()方法。

public class CPP_Frame extends JFrame {
        JButton SettingsButton = new JButton("Options");
        SettingsButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Options_Menu OptionsMenu = new Options_Menu();
                OptionsMenu.OptionsMenuLoader();
            }
        });
    }
public class Options_Menu extends JFrame {
    public void OptionsMenuLoader() {
        CPP_Frame OptionsMenu = new CPP_Frame();
        OptionsMenu.setSize(new Dimension(400, 500));
        OptionsMenu.setVisible(true);
        OptionsMenu.setTitle("Options");
        OptionsMenu.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

最新更新