我遇到过这样一种情况,我希望能够在用户拖动鼠标调整框架大小时了解 JFrame 的高度和宽度。
我对此进行了研究,以下问题提供的答案对我有一点帮助,但并非全部:Listen to JFrame resize events as the user drags their mouse?
我的问题是:我已经让我的“HSFrame”类扩展了 JFrame 并实现了 ActionListener、MouseMotionListener(但是,ActionListener 与这个问题无关)。这个问题涉及的是 MouseMotionListener。
我有一个名为“CanvasPanel”的单独类,它扩展了 JPanel——这是我使用图形对象通过绘制字符串来更新实时信息的地方。
public void mouseMoved(MouseEvent e)
{
}
public void mouseDragged(MouseEvent e)
{
validate();
canvas.repaint();
}
这是我的“HSFrame”类(扩展 JFrame,实现 MouseMotionListener)的代码摘录。在此代码示例中,“canvas”是一个 CanvasPanel 对象,每当调用 MouseDragged 时,我都会调用它的 repaint() 方法。
我选择使用 MouseMotionListener,因为这(据说)会给我实时更新,而不是 ComponentListener 的 componentResized() 方法(与 MouseReleased 绑定(bind))。
当我从左上角调整框架大小时,一切都会 100% 完美更新。高度、宽度、X 和 Y 值都完美重绘。
但是当我从右下角调整大小时,它不会实时更新。我不了解你,但我更喜欢从右下角调整大小。
在“CanvasPanel”类本身中,我扩展了 ComponentListener 并向那里的“HSFrame”对象添加了一个监听器——它不会实时更新,这很好,但它会在释放鼠标,无论 HSFrame 调整到哪个角。
主要问题: 是否可以让 MouseMostionListener 知道我正在从右下角调整 JFrame 的大小?当我通过单击并拖动标题栏来移动框架时它会听到,当我从左上角调整大小时(它也与标题栏交互)它会听到。它只是听不到 JFrame 的其他边界发生什么。
最佳答案
您不必使用鼠标来执行此操作!简单的方法:
写一个component listener .有HSFrame工具ComponentListener
并将调整大小的代码放入 public void componentResized(ComponentEvent e)
。
我认为 mouseListener 不起作用,因为当您从右下角拖动鼠标时,您的鼠标不在 JFrame
中,因此事件监听器不会拾取它。
关于java - 实时监听JFrame高宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8650596/