Java 按钮运行一个全新的类

Java 按钮运行一个全新的类,java,swing,class,jframe,jbutton,Java,Swing,Class,Jframe,Jbutton,我想让我的按钮运行一个全新的类,在里面做不同的事情。我不知道这是否有可能,因为我真的不擅长java。目前我的代码如下所示: public class MainMenu { private class GardenActivities { public GardenActivities() { JFrame GardenAct = new JFrame(); GardenAct.setSize(400, 400);

我想让我的按钮运行一个全新的类,在里面做不同的事情。我不知道这是否有可能,因为我真的不擅长java。目前我的代码如下所示:

public class MainMenu {
    private class GardenActivities {
        public GardenActivities() {
            JFrame GardenAct = new JFrame();
            GardenAct.setSize(400, 400);
            GardenAct.setVisible(true);
        }
    }

    public static void main(String[] args) {
        JFrame choice = new JFrame();
        choice.setSize(700, 500);
        choice.setLocationRelativeTo(null);
        choice.setTitle("Seeds");
        choice.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();                                                        
        panel.setLayout(new GridLayout(0, 1));
        JButton Labora = new JButton();
        Labora.setText("Laboratory");
        Labora.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent ev) {
                      GardenActivities();
                }
        });

        JButton Garden = new JButton();
        Garden.setText("Garden");
        Garden.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ev) {
            }
        });

        choice.getContentPane().add(panel);
        ButtonGroup group = new ButtonGroup();                                              
        group.add(Garden);
        group.add(Labora);
        panel.add(Garden);
        panel.add(Labora);
        choice.setVisible(true);
    }
}

就像我说的。我需要一些东西来运行我的
GardenActivities
类,只需按
Garden
按钮即可。

您的代码无法编译,是吗?当这种情况发生时,您需要将编译错误与您的问题一起发布,以便我们可以帮助您解决这些错误

您需要在GardenActivities()语句之前添加关键字new

@Override
public void actionPerformed(ActionEvent ev) {
  new GardenActivities(); // here
}
另外,将活动放在它自己的文件中。没有理由让它成为一个私有的内部类,也有很多理由不这样做

说到这里,我建议不要让一个JFrame创建并显示另一个JFrame,因为应用程序通常应该只有一个JFrame。取而代之的是考虑使用一个卡布局来交换JPAND“视图”,或者如果你必须显示一个不同的窗口,考虑将第二个依赖窗口显示为一个模态或非模态对话框。 还有更多未经请求的建议:你的主要方法是做得太多了。静态main方法中的大多数代码都应该放在非静态main gui类中,不管是什么类,可能在其构造函数中,或者在构造函数调用的
initGui()
方法中。main方法应该只创建一个主gui类的实例,使其可见,仅此而已


关于:

我不知道这是否有可能,因为我真的不擅长java


不断编写大量代码,大量代码,不断复习教程和教科书,这一切都会改变。

我们让
GardenActivities
类本身实现
ActionListener

然后,您的代码将如下所示:

Garden.addActionListener(new GardenActivities());
否则,你的计划就会奏效

注意

有关为什么要将
ActionListener
留在匿名内部类中并将其调用到
GardenActivities
中的相反意见,请参见注释


谢谢@HovercraftFullOfEels

我想您只需要添加:

新活动()

进入JButton的
actionPerformed()
方法


祝你好运

正如其他人所指出的,这:

 @Override
                public void actionPerformed(ActionEvent ev) 
                    {
                      GardenActivities();
                    }
应该是这样的:

 @Override
                public void actionPerformed(ActionEvent ev) 
                    {
                      new GardenActivities();
                    }

没有理由创建一个内部类,GardenActivities可以而且应该是它自己的类

除非您正在编写玩具程序,否则您不应该让GUI类(视图)实现侦听器(控件),因为这要求类实现太多内容。\@hovercraftfullofels True,但是。。。如果您查看
GardenActivities
类,它充满了显示代码,设置一个新的
JFrame
并执行任何操作。如果类正在做一些与程序工作相关的事情,而不是纯粹的表示,我会说不要让它成为
ActionListener
Lee,他已经在为他的动作侦听器使用匿名内部类,它将为使用它的JButton定制每个动作侦听器。为什么要建议他让GUI实现侦听器,从而迫使他编写一个可怕的方法呢。对不起,这只是个坏建议。@hoverfullofeels你有一些好的观点。我将留下答案,但评论将指出此选择可能存在的问题。+1-同意将GardenActivities保留在单独文件中的建议这与在主方法中显示窗口的方式几乎相同,基本上只是复制和粘贴代码(与显示窗口相关)并将其放入您的
ActionListener
。请参阅