我有一个JFrame
,其中JPanel
为FlowLayout
。面板上显示JButton
。我希望每当鼠标从JFrame中移出时,就关闭JFrame。工作正常。
但是,即使将鼠标移到JButton
上,它也一样!!我不想要那个!
JFrame类的代码,MyFrame.java
:
import javax.swing.*;
import java.awt.event.*;
public class MyFrame extends JFrame {
JButton btnOne; JPanel panOne;
public MyFrame() {}
public MyFrame() {
this.setSize(400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.initComps();
this.setFrameMouseActions();
this.setVisible(true);
}
public void initComps() {
panOne = new JPanel();
btnOne = new JButton("Click Me!");
panOne.add(btnOne);
this.add(panOne);
}
public void setFrameMouseActions() {
this.addMouseListener(new MouseListener() {
public void mouseExited(MouseEvent e) {
dispose();
JOptionPane.showMessageDialog(null, "Disposed", "Disposed", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
public void mouseReleased(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
});
}
}
主要类别代码,
MouseMain.java
:public class MouseMain {
public static void main(String[] args) {
MyFrame frameOb = new MyFrame();
}
}
注意:我也尝试过使用
null layout
(尽管它是不好的做法!)。但是都一样。该代码是我的一个大型项目的简化版本。 最佳答案
// ew。太难了我几乎找不到。
重点是两种方法的区别。首先单击链接。并查看此代码。
frame.getContentPane().getSize(),frame.getWidth()
package test;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class TestCursorOut extends JFrame {
private JPanel contentPane;
private static TestCursorOut frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame = new TestCursorOut();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public TestCursorOut() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(200, 150, 450, 300);
contentPane = new JPanel();
contentPane.addMouseListener(new MouseAdapter() {
@Override
public void mouseExited(MouseEvent e) {
if(!(e.getX() <frame.getContentPane().getWidth() && e.getX() > 0))
{
ExitCursorMethod();
}
if(!(e.getY() <frame.getContentPane().getHeight() && e.getY() > 0))
{
ExitCursorMethod();
}
}
public void ExitCursorMethod() {
dispose();
JOptionPane.showMessageDialog(null, "Disposed", "Disposed", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
});
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JButton btnNewButton = new JButton("New button");
btnNewButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
}
});
btnNewButton.setBounds(160, 10, 97, 23);
contentPane.add(btnNewButton);
}
}