1

だから、ボタン付きのフレーム(awt)があり、「同期」をクリックするとポップアップが表示されます。現時点では、そのポップアップの X をクリックすると、ポップアップが消えるようにしたいだけです。どこに行きたいかを示すコメントがあります。

import java.awt.*;
import java.awt.event.*;
public class Main
{
    public static void main(String[] args)
    {
        ActionListener listen=new MyActionListener();
        Frame frame= new Frame("frame");//make the frame
        Button exit=new Button("Exit");
        exit.setActionCommand("Exit");
        exit.addActionListener(listen);
        Button Sync=new Button("Sync");
        Sync.setActionCommand("Sync");
        Sync.addActionListener(listen);//create Exit and Sync buttons.
        frame.add(exit);
        frame.add(Sync);
        frame.setLayout(new GridLayout(2, 1));
        frame.setSize(100,80);
        frame.setVisible(true);
        frame.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
    }
    public void MyActionListener(ActionEvent e)
    {
        System.exit(0);
    }
}
class MyActionListener implements ActionListener{
    public void actionPerformed(ActionEvent ae) {
        String s = ae.getActionCommand();
        if (s.equals("Exit")) {
            System.exit(0);
        }//note that the exit button DOES work, so this system is working.
        if (s.equals("Sync")) {
            Frame frame2= new Frame("Popup!");
            frame2.setVisible(true);
            frame2.addWindowListener(new WindowAdapter()
            {
                public void windowClosing(WindowEvent e)
                {
                    //Remove frame2 here.
                }
            });
        }
    }
}

以前に非常によく似た(同じではないにしても)質問がありましたが、「答え」はdisposeを使用することでした。("frame2.dispose();") 試してみたところ、次のエラー レポートが表示されました。

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code - local variable frame2 is accessed from within inner class; needs to be declared final
    at vexscouting.MyActionListener$1.windowClosing(Main.java:76)
    at java.awt.Window.processWindowEvent(Window.java:1865)
    at java.awt.Window.processEvent(Window.java:1823)
    at java.awt.Component.dispatchEventImpl(Component.java:4630)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

注: NetBeans を使用しています

4

0 に答える 0