解决:@Desolator在下面的注释中使我的编码完全可用

好的,所以我做了3个相互关联的类:

SplashScreen> ProjectAssignment> CompareSignature

我要谈论的课程是启动画面课程:

所以在这个课上我有3种方法:

public static void createAndShowGUI()
 -此方法包含用于创建和显示GUI的所有信息
 -JFrame frame = new JFrame(“ Welcome!”);等等...

public void actionPerformed(ActionEvent e)
 -此方法使按钮i可以单击并打开下一个GUI
 -if(e.getSource()== enterButton)等...

public static void main(String[] args)
 -此方法仅具有“ createAndShowGUI();”在其中,以便在运行代码时显示GUI

我需要做的是能够给JButton另一个动作,使其在单击时关闭SplashScreen类(来自createAndShowGUI),但我的问题是:


我无法从actionPerformed方法中的JFrame frame = new JFrame("");方法引用createAndShowGUI,因为createAndShowGUI方法是静态的
现在,您说的是“仅将“ static”关键字取出,并将“ JFrame frame;”放置在变量部分中” ...如果我这样做,则public static void main(String[] args)将不采用createAndShowGUI();方法,GUI将不显示
我尝试放入actionPerformed方法:

if(e.getSource()==enterButton){
System.exit(0);
}



和...

   if(e.getSource()==enterButton){
   frame.dispose();   //Cannot reference frame from static createAndShowGUI method
   }


所以我很茫然,是否可以通过单击按钮关闭SplashScreen类?提前致谢

最佳答案

我从here中获取以下示例。也许您使用了相同的名称,因为createAndShowGUI方法具有相同的名称...我通过一个按钮和一个适当的侦听器(用于放置Frame)对其进行了扩展。您的问题对我来说有点难以理解,但是我认为这个例子可以回答您的问题。

public class FrameDemo {
private static void createAndShowGUI() {
    final JFrame frame = new JFrame("FrameDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JButton button = new JButton("Exit");
    button.setPreferredSize(new Dimension(175, 100));
    frame.getContentPane().add(button, BorderLayout.CENTER);

    ActionListener buttonListener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            frame.dispose();
        }
    };
    button.addActionListener(buttonListener);

    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}
}

07-24 22:32