定义变量记载btna点击次数,每次点击后用点击次数命名类b,并实例化,这样就可以调用每个实例关闭方法关闭自己!

解决方案 »

  1.   

    哪你要保证你保存有所有frameB实例的句柄,可以存在数组中,然后需要时执行批量操作不就可以啦?
      

  2.   

    关闭可用system.exit(0);就可以关闭全部窗口。
    你也可以对窗口添加适配器。
    给你个例子:
    addWindowListener (new WindowAdapter()
    {public void windowClosing(WindowEvent e)
    {mydialog.setVisible (false);
    }
    });  
    在你的mydialog(从dialog派生)中加入以上代码,(适当修改)
      

  3.   

    谢谢各位解答,还有一些不明白的地方,希望能继续解答。to extract(苛刻)
    那我是不是要在classB之外才能调用classB的关闭method?我现在用的方式是在classB中加了一个WindowAdapter()。to javalearner()
    怎样才能得到每个instance的句柄(handle??)?你说的批量操作是用for语句实现么?这些句柄是不是也要在classB之外调用?to newman0708(春华)
    不能用System.exit(0)的。我现在只要frameB关闭,如果用System.exit(0)的话我的整个程序都退出了,frameA也会关闭的。
    你提到的例子我在frameB中已经有类似的annonymous inner class加载了。
      

  4.   

    这是我写的一个小程序是一个多点传送的程序跟你的意思很接近
    希望对你有帮助
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class CloseAll extends Frame implements ActionListener {
        public CloseAll() {
            super("title");
            setSize(300, 200);
            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent ew) {
                    System.exit(0);
                }
            });
            JPanel p = new JPanel();
            p.setLayout(new FlowLayout(FlowLayout.CENTER));
            newButton = new JButton("new");
            p.add(newButton);
            newButton.addActionListener(this);
            closeButton = new JButton("close");
            p.add(closeButton);
            
            add(p, BorderLayout.NORTH);    }    public void actionPerformed(ActionEvent e) {
          
            NewFrame f = new NewFrame();
             f.show();
           closeButton.addActionListener(f);    }    public static void main(String args[]) {
            CloseAll c = new CloseAll();
            c.show();
        }    private JButton closeButton;
        private JButton newButton;
    }class NewFrame extends JFrame implements ActionListener {
        public NewFrame() {
              int counter=1;
                 setTitle("titile" + counter++);
                    setSize(300, 200);
               setLocation(30 * counter, 30 * counter);    }
        public void actionPerformed(ActionEvent e){
            dispose();
        }
    }
      

  5.   

    disk(搂着猫睡觉的耗子) :
    谢谢你提供的例子。
    我现在的机子没有编译器,我先发回内部网的邮箱,明天再试一试。粗看了一下,觉得你程序里的
    int counter = 1;
    似乎应该放在public NewFrame() constructor method的外面,而且应该定义成
    static int counter = 0;(你后面用的是counter++不是++counter,是要从1开始计数的吧?)
    否则就没有计数器的作用了。(我猜想你的counter是为每一个NewFrame的title不一样而加的吧?)
      

  6.   

    补充一下前面:
    static int counter = 1;是我看走眼了。
      

  7.   

    在ClassB内部也可以呀,内部的方法作用于自己!
      

  8.   

    要学习更多的swing的编程,请访问我的技术专栏:
    http://www.csdn.net/Author/turbochen