Java 如何使我的JWindow始终保持专注
我正在制作一个包含JWindow的java应用程序。我希望能够跟踪鼠标,而无需用户在进入另一个窗口后单击该窗口。关于鼠标离开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
后为什么要继续处理鼠标,您的问题有点模糊……但是
在应用程序外部移动鼠标时,有两个(基本)选择,可以使用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愿意分享更多的上下文/细节,我很乐意详细说明,但你是对的。永远都是最有用的。。。