2015-04-22 70 views
0

我有一个JFrame的主窗口,它有一个注册按钮在in.Click注册按钮和JDialog窗口弹出。JFrame-JDialog通信

public void mouseClicked(MouseEvent e) { 
       Reg new1=new Reg(users); 
       new1.setVisible(true); 
      } 

该JDialog窗口有2个按钮 - >注册,取消。他们都必须做一些事情,并关闭对话窗口。

这就是我试过的。 在REG(对话窗口)---> btnCancel:

public void mouseClicked(MouseEvent e) { 
         dialog.dispose(); 
         System.out.println("Reg disposed by cancel button"); 
        } 

这将关闭只运行d窗口,但我想从主窗口中执行时,当d窗口(按钮点击)仍然存在像对象在主要fraim“类”并且不关闭。我该怎么办?我如何关闭它?

+0

你是什么意思,在主窗口中执行时 - 它应该由用户操作执行。而FWIW,ActionListener可能更适合处理JButton事件。 – copeg

+0

jframe有一个按钮,点击按钮打开jdialog –

+1

'public void mouseClicked(MouseEvent e){'不要将鼠标监听器添加到按钮!相反,添加一个动作侦听器,该按钮将响应鼠标**和键盘**输入。 –

回答

1

你需要某种方式为框架,以确定如何对话框在您Reg类封闭

// Why are you using a `MouseListener` on buttons?? 
// User use keyboards to, use an ActionListener instead 
public void mouseClicked(MouseEvent e) { 
    Reg new1=new Reg(users); 
    new1.setVisible(true); 
    switch (new1.getDisposeState()) { 
     case Reg.OK: 
      // Clicked Ok 
      break; 
     case Reg.CANCEL: 
      // Clicked cancel or was closed by press [x] 
      break; 
    } 
} 

然后,你需要保持对状态信息...

public class Reg extends JDialog { 
    public static final int OK = 0; 
    public static final int CANCEL = 1; 

    private int disposeState = CANCEL; 

    //... 

    public int getDisposeState() { 
     return disposeState 
    } 

    public void setDisposeState(int state) { 
     disposeState = state; 
    } 

然后你改变状态

// Why are you using a `MouseListener` on buttons?? 
// User use keyboards to, use an ActionListener instead 
public void mouseClicked(MouseEvent e) { 
    setDisposeState(CANCEL); 
    dialog.dispose(); 
    System.out.println("Reg disposed by cancel button"); 
} 

这一切都假设你的对话框是mo话说回来,当然DAL ...

现在,这一切,就个人而言,我会让你RegJPanel并将其添加到JOptionPane代替或使用CardLayout

看看:

...更多细节