按钮运行一个全新的类

时间:2013-08-20 21:33:38

标签: java swing class jframe jbutton

我希望我的按钮能够运行一个全新的类,它将在内部执行不同的操作。我不知道这是否可能,因为我对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 个答案:

答案 0 :(得分:7)

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

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

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

另外,将GardenActivities放在自己的文件中。没有理由把它变成一个私人的内部阶级,并且有很多理由不这样做。

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

还有更多未经请求的建议:你的主要方法做得太多了。静态main方法中的大多数代码都应该进入非静态主gui类,无论是在构造函数中还是在构造函数调用的initGui()方法中。主要方法应该只创建一个主gui类的实例,让它可见,就是这样。


关于:

  

我不知道这是否可能,因为我对java非常不好。

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

答案 1 :(得分:3)

实现您想要的一种方法,我们自己制作GardenActivities类实现ActionListener

然后你的代码看起来像这样:

Garden.addActionListener(new GardenActivities());

否则,您的计划应该有效。

注意

请参阅有关为什么人们希望将ActionListener留在匿名内部类中并将其调入GardenActivities的反对意见的评论。

谢谢@HovercraftFullOfEels

答案 2 :(得分:3)

我认为你只需要添加:

new GardenActivities();

进入JButton的actionPerformed()方法。

祝你好运!

答案 3 :(得分:1)

正如其他人所指出的那样:

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

应该是这样的:

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

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