实时监听JFrame的高度和宽度

时间:2011-12-28 00:14:07

标签: java swing resize jframe mouselistener

我有一种情况,我希望能够知道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绑定)。

当我从左上角调整框架大小时,所有内容都完美更新100%。高度,宽度,X和Y值都完美重绘。

但是当我从右下角调整大小时,它不会实时更新。我不了解你,但我更喜欢从右下角调整大小。

在“CanvasPanel”类本身中,我扩展了ComponentListener并在那里添加了一个“HSFrame”对象的监听器 - 它不会实时更新,这很好,但它确实重绘了高度和宽度之后鼠标被释放,无论HSFrame的大小调整了哪个角落。

主要问题: 是否有可能让MouseMostionListener知道我正在从右下角调整JFrame的大小?当我通过单击并拖动标题栏来移动框架时它会听到,当我从左上角调整大小(它也与标题栏交互)时它会听到。当JFrame的其他边界发生任何事情时,它听不到。

1 个答案:

答案 0 :(得分:3)

您不必使用鼠标执行此操作!这样做很简单: 写一个component listener。让HSFrame实现ComponentListener并将调整后的代码放在public void componentResized(ComponentEvent e)

我认为mouseListener不起作用,因为当你从右下角拖动时,你的鼠标不在JFrame中,所以事件监听器不会把它拿起来。