1

已解决:@Desolator 在下面的评论中让我的编码完全正常工作

好的,所以我制作了 3 个相互链接的类:

SplashScreen > ProjectAssignment > CompareSignature

我要讲的课是splashscreen课:

所以在这个类中我有 3 种方法:

public static void createAndShowGUI() - 这个方法包含创建和显示 GUI 的所有信息 - JFrame frame = new JFrame("Welcome!"); ETC...

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

public static void main(String[] args) - 这个方法只有“createAndShowGUI();” 以便在运行代码时显示 GUI

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

  1. 我无法JFrame frame = new JFrame("");createAndShowGUIactionPerformed 方法中的方法引用,因为该createAndShowGUI方法是静态的

  2. 现在您说“只需取出“静态”关键字并将“JFrame frame;”放在变量部分中”...如果我这样做,那么public static void main(String[] args)将不会采用该createAndShowGUI();方法并且 GUI 将不会显示

  3. 我试过放入 actionPerformed 方法:

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

和...

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

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

4

1 回答 1

0

我从这里举了下面的例子。也许您采用了相同的方法,因为该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();
        }
    });
}
}
于 2013-02-23T12:01:11.690 回答