Java 实时收听JFrame的高度和宽度

Java 实时收听JFrame的高度和宽度,java,swing,resize,jframe,mouselistener,Java,Swing,Resize,Jframe,Mouselistener,我曾经遇到过这样一种情况,当用户拖动鼠标调整帧大小时,我希望能够知道JFrame的高度和宽度 我对此进行了研究,以下问题提供的答案对我有一点帮助,但并非完全如此: 我的问题是:我让我的“HSFrame”类扩展了JFrame并实现了ActionListener,MouseMotionListener(不过ActionListener与这个问题无关)。这个问题涉及的是MouseMotionListener 我有一个名为“CanvasPanel”的单独类,它扩展了JPanel——在这里,我使用图形对象

我曾经遇到过这样一种情况,当用户拖动鼠标调整帧大小时,我希望能够知道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的ComponentResistized()方法(与MouseRelease绑定)

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

但当我从右下角调整大小时,它不会实时更新。我不知道你的情况,但我更喜欢从右下角调整大小

在“CanvasPanel”类本身中,我扩展了ComponentListener,并在“HSFrame”对象中添加了一个侦听器——它不会实时更新,这很好,但在释放鼠标后它会重新绘制高度和宽度,而不管HSFrame的大小是用哪个角点调整的

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

你不必用鼠标来做这件事!用简单的方法做: 写一封信。让HSFrame实现并将调整大小代码放入
public void componentresistized(ComponentEvent e)


我认为mouseListener不会工作,因为当您从右下角拖动鼠标时,您的鼠标不在
JFrame
,因此事件侦听器不会拾取它。

Mmmm它不会触发属性更改事件吗?当我从右下角调整大小时,ComponentResistized()事件会为我动态触发。我在XP上使用JDK6_7。张贴你的文章,说明问题所在。这是我能做的最基本的一个例子。将其另存为MainClass.java,编译并运行。它应该像一个JAVA文件那样工作。这里的问题如下:当用户从右下角拖动时,调整主应用程序窗口的大小不会实时重新绘制。它会实时地重新绘制,从左上角拖动。这就是我的想法:如果你从任何地方拖动调试窗口,它会实时更新。那么为什么主窗口不这样做呢?我已将两个侦听器添加到两个帧中。右下角是唯一不起作用的地方。抱歉,下面是该示例的一个小补丁:。我忘了将canvas.repaint()添加到ResizeFrame类中的ComponentListener方法中。之前我只调用了repaint()。我猜SSCCE只有15-20行,所以代码应该发布在论坛中,以便我们都能看到。谢谢,但我确实尝试过这个。下面是一个演示我所说内容的示例(将原始代码保存为MainClass.java,编译,然后运行)。唯一不实时更新的是从右下角调整“ResizeFrame”(相当于示例中的HSFrame)的大小。我只是不明白--甚至从右下角调整调试框架的大小都是可行的。我已将ComponentListener和MouseMotionListener添加到这两个框架中,但在拖动鼠标时,ResizeFrame的右下角不会重新绘制。很抱歉,下面是该示例的一个小补丁:。我忘了将canvas.repaint()添加到ResizeFrame类中的ComponentListener方法中。之前我只调用了repaint()。我决定暂时解决这个问题,因为我只是让它更新调试信息,这与实际的程序没有任何关系(高度/宽度是组件和类似东西的最佳位置)但如果有人仍然能想出是否有可能实现我最初想要的,那就太好了