【问题标题】:how to detect mousereleased on jframe border?如何检测鼠标在jframe边框上释放?
【发布时间】:2014-09-28 15:52:35
【问题描述】:

在我的jframe调整大小(拖动边框)结束时,我需要知道用户何时在边框上释放鼠标,以进行具体处理。我已经搜索过,但似乎我发现的都是更复杂/具体的案例。

import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class FrameDemo {

private static void createAndShowGUI() {
    JFrame frame = new JFrame("FrameDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JLabel emptyLabel = new JLabel("");
    emptyLabel.setPreferredSize(new Dimension(175, 100));
    frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);

    frame.pack();
    frame.setVisible(true);
    frame.addComponentListener(new ComponentAdapter() {
        @Override
        public void componentResized(ComponentEvent e) {
            System.out.println("componentResized");
            here I am resizing the components inside the contentPane, no interruption, it's ok
        }
    });
    frame.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent e) {
            System.out.println("released");
            **here I need to do specific action on a component but it is never fired**
        }
    });
}

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            createAndShowGUI();
        }
    });
}
}

【问题讨论】:

    标签: java swing jframe mouseevent border


    【解决方案1】:

    一个可能的选择是使用:

    Toolkit.getDefaultToolkit.setDynamicLayout(false) 
    

    这意味着框架的布局只会在鼠标释放时完成,这意味着componentResized()事件只会触发一次。

    否则您将需要使用未装饰的框架,然后添加回您自己的自定义边框和调整大小的代码。

    【讨论】:

      【解决方案2】:

      根据Trail: Creating a GUI With JFC/Swing, Using Top-Level Containers,边框不是JFrame的一部分。

      How to Make Frames (Main Windows): “框架 [...] 是具有边框等装饰的窗口” ... “默认情况下,窗口装饰由原生提供窗口系统。”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        • 2021-04-25
        • 2021-12-09
        • 2013-02-25
        • 2021-11-20
        • 1970-01-01
        • 2017-07-17
        相关资源
        最近更新 更多