如何使侦听器关系不是recursiv

时间:2015-09-29 18:15:08

标签: java swing awt

我将我的代码分解为理论问题的基础

public class main {

    public static void main(String[] args) {    
        new Object1().a();
    }
}

public class Object1 {

    private static Object2 object2;

    public Object1() {

    }

    public void a(){

        object2 = new Object2(this);
        object2.setVisible(true);
        System.out.println("new object2 created");

    }

    public void b(){

        object2 = null;
        System.out.println("set object2 to null");
        a();

    }
}

/**
 *
 *Class creates JFrame with a button.
 *the button has an event listener which calls method b form object1
 *
 */

public class Object2 extends javax.swing.JFrame {

    private JButton jButton1;
    private Object1 object1;

    public Object2(Object1 ob1) {

        super();
        this.object1 = ob1;
        initGUI();

    }

    private void initGUI() {
        try {
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            {
                jButton1 = new JButton();
                getContentPane().add(jButton1, BorderLayout.CENTER);
                jButton1.setText("click me");
                jButton1.setPreferredSize(new java.awt.Dimension(311, 143));
                jButton1.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent evt) {

                        jButton1ActionPerformed(evt);
                    }
                });
            }
            pack();
            this.setSize(150, 125);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jButton1ActionPerformed(ActionEvent evt) {

        System.out.println("button clicked");

        object1.b();

    }

我的jFrame的调用很可能是一个递归,结果是设置Frame null将不会做任何事情...... 框架仍然可见,并且可以在不抛出NullPointerException的情况下工作。 但这不是问题的中心。

问题是: 如何在没有递归的情况下为此编写等效代码?

1 个答案:

答案 0 :(得分:0)

JFrame没有居中?是那个问题。或者你有一些设计问题。 ?

object2.setLocationRelativeTo(null);

它将以JFrame

为中心

否则如果出现设计问题,请使用setter来处理其中任何一个..比如

public class Object2 extends javax.swing.JFrame {

    private JButton jButton1;
    private Object1 object1;

    public Object2(Object1 ob1) {

        super();
        initGUI();

    }

    public void setObject1(Object1 object1){
        this.object1 = object1;
    }

........

Object1

中创建object2对象后调用setter