假设有两个JFrame, FrameA, FrameB.
FrameA里面有一个toggleButton,我想用这个按钮来控制FrameB的开关.
如何实现?我现在的代码,能实现开,但不知道怎么去关.最好能写一下代码,谢谢.FrameA.classimport java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JFrame;
import javax.swing.JToggleButton;
public class FrameA extends JFrame { /**
 * Launch the application
 * @param args
 */
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
FrameA frame = new FrameA();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} /**
 * Create the frame
 */
public FrameA() {
super();

setBounds(100, 100, 195, 87);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JToggleButton toggleButton = new JToggleButton();
toggleButton.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg0) {
JToggleButton newtb = (JToggleButton)arg0.getSource();
if(newtb.isSelected())
{
System.out.println("on");
new FrameB();

}else{
System.out.println("off");

}
}
});
toggleButton.setText("JToggleButton");
getContentPane().add(toggleButton, BorderLayout.CENTER);
//
}}FrameB.classimport java.awt.BorderLayout;
import java.awt.EventQueue;import javax.swing.JFrame;
import javax.swing.JLabel;
public class FrameB extends JFrame {
/**
 * Create the frame
 */
public FrameB() {
super();
setBounds(100, 100, 179, 80);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JLabel label = new JLabel();
label.setText("FrameB");
getContentPane().add(label, BorderLayout.CENTER);
setVisible(true);
//
}
}

解决方案 »

  1.   

    将FrameA改一下就好了:
    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JFrame;
    import javax.swing.JToggleButton;
    public class FrameA extends JFrame {

    public FrameB fb;    /**
         * Launch the application
         * @param args
         */
        public static void main(String args[]) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        FrameA frame = new FrameA();
                        frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }    /**
         * Create the frame
         */
        public FrameA() {
            super();
            
            setBounds(100, 100, 195, 87);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        final JToggleButton toggleButton = new JToggleButton();
            toggleButton.addActionListener(new ActionListener() {
                public void actionPerformed(final ActionEvent arg0) {
                    JToggleButton newtb = (JToggleButton)arg0.getSource();
                    if(newtb.isSelected())
                    {
                        System.out.println("on");
                        fb = new FrameB();
                        
                    }else{
                        System.out.println("off");
                        fb.dispose();
                        fb = null;
                        
                    }
                }
            });
            toggleButton.setText("JToggleButton");
            getContentPane().add(toggleButton, BorderLayout.CENTER);
            //
        }}
      

  2.   

    上面最重要的修改是用JFrame.dispose()关闭掉FrameB