2011-05-15 108 views
2

嗨,大家好,我想让我的JFrame在点击鼠标时关闭。我有代码来做,但它不工作...在鼠标上关闭JFrame点击

public void closeFrame() 
{ 

    jPanel.removeAll(); 
    String x = ""; 
    JLabel exit = new JLabel ("Click Anywhere To Close!", JLabel.CENTER); 
    exit.setPreferredSize (new Dimension (700, 100)); 
    jPanel.add (exit); 
    jPanel.revalidate(); 

    MouseListener ml = new MouseAdapter() 
    { 
     public void mouseClicked (MouseEvent event) 
     { 
      //Put JFrame close code here 
      dispose(); 
      System.exit (0); 
     } 
    } 
    ; 
    addMouseListener (ml); 
    validate(); //This hasn't made a difference :(

} 

该类扩展JFrame,它DOESNT实现MouseListener。尽管如此,代码不起作用。

这是JFrame的初始化看起来(希望它能帮助)...

public void createFrame() 
{ 
    new JFrame (":) :)"); 
    setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
    setVisible (true); 
    //Some Initialization for jPanel variable 
    getContentPane().add(jPanel); 
    pack(); 
} 

我怎样才能使此代码工作&如果我不能,有没有关闭的替代方法在鼠标点击?

---编辑---

由于去气垫船全鳗鱼

的MouseListener的必须添加到JPanel的

//WORKING CODE 
public void closeFrame() 
{ 

    jPanel.removeAll(); 
    String x = ""; 
    JLabel exit = new JLabel ("Click Anywhere To Close!", JLabel.CENTER); 
    exit.setPreferredSize (new Dimension (700, 100)); 
    jPanel.add (exit); 
    //jPanel.revalidate(); 

    MouseListener ml = new MouseAdapter() 
    { 
     public void mouseClicked (MouseEvent event) 
     { 
      //Put JFrame close code here 
      dispose(); 
      System.exit (0); 
     } 
    } 
    ; 
    jPanel.addMouseListener (ml); 
    jPanel.revalidate(); 

} 
+0

“我想让我的JFrame在点击鼠标时关闭”。你的意思是,如果框架被其他窗口部分遮挡,并且我看到它的一部分并点击它将它放在前面,你希望它应该关闭吗? *为什么?* – 2011-05-16 00:06:18

回答

2

我如果JFrame的contentPane的怀疑,即您已经将MouseListener添加为与正在显示的JFrame不相同,尤其是因为我看到您在createFrame方法中创建了新的JFrame。你明白MouseListener只有在添加到可视化组件后才能工作,对吗?

建议:

  • 没有你的类扩展JFrame的
  • 您的MouseListener添加到您要添加到可视化的JFrame的contentPane的JPanel的。
  • 为您的课程添加一个JFrame变量,并让它引用您在createFrame方法中创建的JFrame。然后,您可以按照您认为合适的方式处理此JFrame。
  • 不要忘记在可视化的JFrame上调用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。
+0

Omg HFOE,你做到了。我所需要做的就是将mouseListener添加到Panel而不是框架(STUPID ME !!) - 再次感谢! – 2011-05-16 00:08:37

+0

@Jimmy:很高兴帮助! – 2011-05-16 00:27:50

1

这就是我所做的。

btnClose = new JButton("Close"); 
btnClose.addMouseListener(new MouseAdapter() { 
@Override 
public void mouseClicked(MouseEvent e) { 
     dispose(); 
    } 
}); 
btnClose.setBounds(253, 190, 75, 25); 
contentPane.add(btnClose); 
}