当用户拖动鼠标时监听 JFrame 调整大小事件?

2024-01-29

当用户单击 JFrame 的一角来调整大小并拖动鼠标时,JFrame 将根据用户拖动时鼠标的当前位置重新绘制。您如何收听这些事件?

以下是我目前尝试过的:

public final class TestFrame extends JFrame {
    public TestFrame() {
        this.addComponentListener(new ComponentAdapter() {
            public void componentResized(ComponentEvent e) {
                // This is only called when the user releases the mouse button.
                System.out.println("componentResized");
            }
        });
    }

    // These methods do not appear to be called at all when a JFrame
    // is being resized.
    @Override
    public void setSize(int width, int height) {
        System.out.println("setSize");
    }

    @Override
    public void setBounds(Rectangle r) {
        System.out.println("setBounds A");
    }

    @Override
    public void setBounds(int x, int y, int width, int height) {
        System.out.println("setBounds B");
    }
}

如何确定和限制用户在拖动鼠标时如何调整窗口大小(基于窗口的当前纵横比)?


您可以添加一个组件侦听器并实现 componentResized 函数,如下所示:

JFrame component = new JFrame("My Frame");

component.addComponentListener(new ComponentAdapter() 
{  
        public void componentResized(ComponentEvent evt) {
            Component c = (Component)evt.getSource();
            //........
        }
});

EDIT:显然,对于 JFrame,componentResized 事件与 mouseReleased 事件挂钩。这就是释放鼠标按钮时调用该方法的原因。

实现您想要的效果的一种方法是添加一个覆盖 JFrame 整个区域的 JPanel。然后将 componentListener 添加到 JPanel(即使您的鼠标仍在拖动,也会调用 JPanel 的 componentResized)。当您的框架调整大小时,您的面板也会调整大小。

我知道,这不是最优雅的解决方案,但它确实有效!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当用户拖动鼠标时监听 JFrame 调整大小事件? 的相关文章

随机推荐