Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从ActionListener启动类?_Java_Swing_User Interface - Fatal编程技术网

Java 如何从ActionListener启动类?

Java 如何从ActionListener启动类?,java,swing,user-interface,Java,Swing,User Interface,我有一个基本的GUI类,有一个框架、一个表和一个按钮。我想让它从位于不同类中的另一个基本GUI框架的ActionListener启动 这是我的主要课程: 它启动我的主菜单,我想从主菜单启动另一个名为ViewTeamStatistics的类 这是执行的操作。这就是在我按下按钮后告诉程序打开框架的内容 private void vtsActionPerformed(java.awt.event.ActionEvent evt) {

我有一个基本的GUI类,有一个框架、一个表和一个按钮。我想让它从位于不同类中的另一个基本GUI框架的ActionListener启动

这是我的主要课程: 它启动我的主菜单,我想从主菜单启动另一个名为ViewTeamStatistics的类 这是执行的操作。这就是在我按下按钮后告诉程序打开框架的内容

private void vtsActionPerformed(java.awt.event.ActionEvent evt) {                                    
  ViewTeamStatistics v1 =  new ViewTeamStatistics();       
  v1.setVisible(true);         
}        

编译器返回时没有错误,但当我运行程序并按下按钮时,什么也没有发生。

我不完全理解您的问题,是否要在按下按钮后启动新帧?如果是这样,下面是一个示例代码:

public class ExampleWindow implements ActionListener{
    private JFrame mainFrame;
    private JButton button;

    public ExampleWindow(){
        button = new JButton("Press me!");
        button.addActionListener(this);
        mainFrame = new JFrame("Frame name");
        mainFrame.add(button);
        mainFrame.setVisible(true);
        //Remember about this line
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        new SomeWindow();
    }
}


class SomeWindow{
     private JFrame frame;

     public SomeWindow(){
         frame = new JFrame;
         frame.setVisible(true);
     }
}

我没有尝试编译它,因此可能会出现一些错误。

您实际上没有ActionListener。是时候进行一些调试以尝试隔离错误了。为此使用IDE的调试器。在你找出错误之前,你(和我们)无法解决它。如果您仍然被卡住,请创建一个并张贴在此处。VTSACTION执行的是什么?您需要阅读以下内容:请参阅
//记住这一行:mainFrame.setDefaultCloseOperation(JFrame.EXIT\u ON\u CLOSE)确实如此。请记住避免
在关闭时退出
并使用
在关闭时处置
(并关闭应用程序显式启动的所有线程)。我没有意识到这一点,谢谢。然而,在这个简单的例子中,EXIT_ON_CLOSE就足够了吗?否。请尝试在上运行代码。现在关闭其中一个框架。另外两个仍在屏幕上。关闭其余两个,VM将结束。现在将关闭操作更改为
EXIT\u ON\u close
编译并再次运行它。关闭任何一个框架和整个应用程序。末端!所以,不,
EXIT\u ON\u CLOSE
在一般情况下是不好的,在这个有多帧的情况下更糟。另一方面,我认为这个答案的质量一般都很差。未使用EDT,未使用
pack()
,低于最佳关闭操作。。
public class ExampleWindow implements ActionListener{
    private JFrame mainFrame;
    private JButton button;

    public ExampleWindow(){
        button = new JButton("Press me!");
        button.addActionListener(this);
        mainFrame = new JFrame("Frame name");
        mainFrame.add(button);
        mainFrame.setVisible(true);
        //Remember about this line
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        new SomeWindow();
    }
}


class SomeWindow{
     private JFrame frame;

     public SomeWindow(){
         frame = new JFrame;
         frame.setVisible(true);
     }
}