Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使我的JWindow始终保持专注_Java_Swing_Jwindow - Fatal编程技术网

Java 如何使我的JWindow始终保持专注

Java 如何使我的JWindow始终保持专注,java,swing,jwindow,Java,Swing,Jwindow,我正在制作一个包含JWindow的java应用程序。我希望能够跟踪鼠标,而无需用户在进入另一个窗口后单击该窗口。关于鼠标离开JWindow后为什么要继续处理鼠标,您的问题有点模糊……但是 在应用程序外部移动鼠标时,有两个(基本)选择,可以使用JNI/JNA解决方案,也可以轮询 下面演示后者,使用MouseInfo和javax.swing.Timer更新标签 import java.awt.BorderLayout; import java.awt.EventQueue; import java.

我正在制作一个包含JWindow的java应用程序。我希望能够跟踪鼠标,而无需用户在进入另一个窗口后单击该窗口。

关于鼠标离开
JWindow
后为什么要继续处理鼠标,您的问题有点模糊……但是

在应用程序外部移动鼠标时,有两个(基本)选择,可以使用JNI/JNA解决方案,也可以轮询

下面演示后者,使用
MouseInfo
javax.swing.Timer
更新标签

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.MouseInfo;
import java.awt.PointerInfo;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class MouseWindow {

    public static void main(String[] args) {
        new MouseWindow();
    }

    public MouseWindow() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JLabel label;

        public TestPane() {
            setLayout(new BorderLayout());
            label = new JLabel();
            label.setFont(label.getFont().deriveFont(48f));
            label.setHorizontalAlignment(JLabel.CENTER);
            label.setVerticalAlignment(JLabel.CENTER);
            add(label);
            updateMouseInfo();

            Timer timer = new Timer(250, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    updateMouseInfo();
                }
            });
            timer.start();
        }

        protected void updateMouseInfo() {
            PointerInfo pi = MouseInfo.getPointerInfo();
            label.setText(pi.getLocation().x + "x" + pi.getLocation().y);
        }            
    }
}

已更新


如果对平台的支持不确定这与保持窗口集中有什么关系,因为您永远无法完成任何工作,那么您也可能会找到帮助来保持窗口位于其他窗口之上。如果要执行“全局”鼠标监视,可以实现JNI解决方案,也可以编写一个
线程
,用于轮询指针信息。但请记住,返回的鼠标位置(以屏幕坐标表示;)问:JWindow不是模态A:如果是的话,OP将需要指示使用一些模态类型的未修饰JDialog,并且总是打开,@mKorbel如果OP愿意分享更多的上下文/细节,我很乐意详细说明,但你是对的。永远都是最有用的。。。