2

我希望我的按钮运行一个全新的类,它会在里面做不同的事情。我不知道这是否可能,因为我真的不擅长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按钮。

4

4 回答 4

7

您的代码无法编译,是吗?发生这种情况时,您需要在问题中发布编译错误,以便我们为您提供帮助。

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

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

此外,将 GardenActivity 放在它自己的文件中。没有理由让它成为私有内部类,并且有很多理由不这样做。

话虽如此,我建议不要让一个 JFrame 创建并显示另一个 JFrame,因为应用程序通常应该只有一个 JFrame。而是考虑使用 CardLayout 交换 JPanel“视图”,或者如果您必须显示不同的窗口,请考虑将第二个依赖窗口显示为模态或非模态对话框。

还有更多不请自来的建议:您的主要方法做得太多了。静态 main 方法中的大部分代码都应该放在非静态 main gui 类中,不管是什么,可能在它的构造函数中或在initGui()构造函数调用的方法中。main 方法应该只创建一个主 gui 类的实例,使其可见,仅此而已。


关于:

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

继续编写大量代码,大量代码,并继续查看教程和教科书,这将会改变。

于 2013-08-20T21:35:44.133 回答
3

一种做你想做的事情的方法,我们让GardenActivities类实现ActionListener自己。

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

Garden.addActionListener(new GardenActivities());

否则,您的计划应该会奏效。

笔记

请参阅评论以获取关于为什么要离开ActionListeneranonymous 内部类并让它调用的反对意见GardenActivities

谢谢@HovercraftFullOfEels

于 2013-08-20T21:37:00.383 回答
3

我认为您只需要添加:

new GardenActivities();

进入你的 JButton 的actionPerformed()方法。

祝你好运!

于 2013-08-20T21:38:03.803 回答
1

正如其他人指出的那样:

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

应该看起来像:

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

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

于 2013-08-20T21:40:38.170 回答