我遇到了一个情况,我希望能够在用户拖动鼠标调整框架大小时知道JFrame的高度和宽度。
我进行了研究,以下问题提供的答案对我有所帮助,但并不完全: 听取用户拖动鼠标时的JFrame调整大小事件?
我的问题是: 我让我的"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相关联)。
当我从左上角调整框架大小时,所有内容都完美地更新了100%。高度,宽度,X和Y值都完美地重新绘制。
但是,当我从右下角调整大小时,它不会实时更新。我不知道你们怎么看,但我更喜欢从右下角调整大小。
在“CanvasPanel”类本身中,我扩展了ComponentListener并向那里的“HSFrame”对象添加了监听器 - 它不会实时更新,这很好,但是它会在鼠标释放后重新绘制高度和宽度,无论HSFrame被使用哪个角调整大小。
主要问题: 是否可能让MouseMostionListener知道我正在从右下角调整JFrame的大小?它听到我通过单击和拖动标题栏移动框架时的声音,并且听到当从左上角调整大小时(这也是与标题栏交互的)。它只是听不到JFrame的其他边界发生的任何事情。