有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在鼠标单击时关闭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,但未实现MouseListener。尽管如此,代码还是不起作用

这就是JFrame初始化的样子(希望有帮助)

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

如何使此代码正常工作&;如果我不能,有没有其他方法可以在鼠标点击时关闭

---编辑---

感谢装满鳗鱼的气垫船

必须将鼠标侦听器添加到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 ();

}

共 (2) 个答案

  1. # 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);
    }
    
  2. # 2 楼答案

    我想知道您添加了MouseListener的JFrame contentPane是否与正在显示的JFrame不同,特别是因为我看到您在createFrame方法中创建了一个新的JFrame。您知道MouseListener只有在添加到可视化组件时才能工作,对吗

    建议:

    • 不要让你的类扩展JFrame
    • 将鼠标侦听器添加到要添加到可视化JFrame的contentPane的JPanel中
    • 给你的类一个JFrame变量,让它引用你在createFrame方法中创建的JFrame。然后,您可以根据需要处置此JFrame
    • 不要忘记在可视化的JFrame上调用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)