从另一个类控制JFame

时间:2016-09-09 13:45:13

标签: java

我想创建一个菜单窗口,它将成为gui类的一部分。 gui类由Manager类控制。问题是,当我按下菜单中的按钮时,我希望Manager类知道按下了一个按钮。我尝试使用标志来指示是否按下按钮,但由于某种原因它不起作用。这是我的代码:  gui班:

public class Gui extends JFrame implements ActionListener {

private JFrame jframe;
private JPanel jpanel;
private JButton jbutton;
public boolean jbuttonFlag = false;
Gui(){

    jframe = new JFrame("Test Frame");

    jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    jpanel = new JPanel();

    jpanel.setBackground(Color.BLUE);

    jbutton = new JButton("Click Me");

    jbutton.addActionListener(this);

    jpanel.add(jbutton);

    jframe.add(jpanel);

    jframe.pack();

    jframe.setVisible(true);
}

    public void actionPerformed(ActionEvent e) {

            if(e.getActionCommand().equals("Click Me"))

                  jbuttonFlag = true;
    }
}

和Manager类:

public class Manager{

    Gui g;

    Manager(){

        g = new Gui();

    }

    public void Start(){

        while( !g.jbuttonFlag );
        System.out.println("Button Pressed");

    }

}

当我单击按钮时,我希望它在控制台中写入它被单击,但是它不会发生。为什么?谢谢!

1 个答案:

答案 0 :(得分:0)

您应该同步它们,因为它们是单独的线程。这对我有用:

经理:

public void Start(){

        synchronized(g){try{g.wait();}catch(Exception e){}}
        System.out.println("Button Pressed");

    }

在桂:

public void actionPerformed(ActionEvent e) {

            if(e.getActionCommand().equals("Click Me")){
                synchronized(this){
                    this.notify();
                }
             }
    }