现在通过一个函数返回一个JButton按钮 然后把它添加到JFrame里面 现在想通过点击按钮吧这个JFrame关闭 怎么写函数啊 用this.setVisible(false)不行 
    还有现在有一个JFrame A,上面有一个按钮,点击一下弹出另一个 JFrame B 怎么样通过点击B上面的按钮吧B关闭 再把A显示出来 
  怎么写??

解决方案 »

  1.   

    关闭Jframe调用this.dispose();方法
    在JFrame A中按钮事件中调用方法显示B窗体,同时把JFrameA传到B窗体中
    private void showB()
    {
    dispose();
    JFrame b = new JFrameB(this);
    }
    在B窗体的按钮事件中调用方法关掉B窗体同时显示A窗体
    private void showA()
    {   
    dispose();
    a.show();
    }注意在JFrameB中定义,构造方法中将其赋值
    private JFrame a;
    public JFrameB(JFrame a)
    {
    this.a = a;
    //省略其他代码
    }
      

  2.   

    public class TestFrame extends JFrame {
    FF ff;
    JButton b, c; public TestFrame() {
    setLayout(null);
    b = new JButton();
    b.setBounds(20, 20, 100, 50);
    add(b);
    setTitle("窗口一");
    setSize(500, 500);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
    b.addActionListener(new bActionListener(this));
    } public static void main(String[] args) {
    TestFrame f = new TestFrame();
    } class bActionListener implements ActionListener {
    TestFrame e; bActionListener(Object e) {
    this.e = (TestFrame) e;
    } public void actionPerformed(ActionEvent e) {
    this.e.newFrame();
    }
    } class cActionListener implements ActionListener {
    TestFrame e; cActionListener(Object e) {
    this.e = (TestFrame) e;
    } public void actionPerformed(ActionEvent e) {
    this.e.oldFrame();
    }
    } class FF extends JFrame {
    TestFrame e; public FF(TestFrame e) {
    this.e = e;
    setLayout(null);
    c = new JButton();
    c.setBounds(20, 20, 100, 50);
    add(c);
    setTitle("窗口二");
    setSize(500, 600);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    c.addActionListener(new cActionListener(this.e));
    }
    } public void newFrame() {
    this.setVisible(false);
    ff = new FF(this);
    } public void oldFrame() {
    this.setVisible(true);
    ff.setVisible(false);
    }
      

  3.   

    setVisible(false);
    这个应该是可以的,你不能实现的原因可能是你在构造方法中加入了
    setVisible(true);
    而导致你在点击按钮执行关闭的时候没有实现。
    解决的方法是,你可以将构造方法中的
    setVisible(true);
    删掉,然后在主方法中(如果是单个窗口情况)或点击按钮的监听器中实例化另一个窗口类的时候(弹出窗口的情况)时候调用setVisible(true);方法。这样应该就可以实现了。PS:如果是弹出窗口的话,建议使用setVisible(false);来隐藏窗口,这样可以节省资源,
    如果是单个窗口的话,就可以使用dispose();方法了,直接关闭窗口。希望可以帮助到你!!
      

  4.   

    setVisible(false) 只是让它看不到。
    dispose() 才是正道 ,还有更血腥的 System.exit()有个很卑鄙的办法:
    class A{
      B arg = null;
      setB( B arg ); 
    }class B{
      A arg = null;
      setA( A arg );
    }
    持有对方引用了~ 后面你懂的~