awt的trayicon滑鼠位置是否正確考慮示例代碼,
import java.net.*;
import java.awt.*;
import javax.imageio.*;
import java.awt.event.*;
import javax.swing.SwingUtilities;
public class SampleTray extends MouseAdapter {
private SystemTray tray = SystemTray.getSystemTray();
private TrayIcon trayIcon;
public SampleTray() {
try {
this.trayIcon = new TrayIcon(
ImageIO.read(new URL("https://i.stack.imgur.com/lM3aS.png"))
);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
try {
tray.add(trayIcon);
} catch (AWTException e) {
e.printStackTrace();
System.exit(1);
}
this.trayIcon.setImageAutoSize(true);
this.trayIcon.addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
System.out.println("Screen Size is x " screenSize.getWidth() " y " screenSize.getHeight());
System.out.println("Mouse clicked at x " e.getX() " y " e.getY());
}
public static void main(String[] args) {
SwingUtilities.invokeLater(SampleTray::new);
}
}
以上代碼的輸出:
Screen Size is x 1536.0 y 864.0
Mouse clicked at x 1638 y 1062
為什么 x 值大于螢屏邊界?我的任務欄在底部。如何獲得相對于螢屏的正確位置?
注意:getXonScreen 和 getYonScreen 回傳相同的值,如果值正確,請向我解釋該值如何相對于來自 (0 , 0) 的螢屏。
編輯:
我正在使用此位置將??未旋轉的視窗放置在該托盤圖示附近,因此我希望這是正確的。
正如@Gilbert Le Blanc 所說的問題是縮放,但是當我將縮放比例更改為 100% 時,所有內容都變得太小,并且除了最終用戶將要更改此軟體的縮放比例之外,還有什么方法可以解決此問題?
謝謝。
uj5u.com熱心網友回復:
我使用以下想法解決了,
@Override
public void mouseClicked(MouseEvent e) {
var scale = Toolkit.getDefaultToolkit().getScreenResolution() / 96.0;
System.out.println("Scaling Size is x " scale );
System.out.println("Size : " Toolkit.getDefaultToolkit().getScreenSize());
System.out.println("Mouse clicked at x " e.getXOnScreen() / scale " y " e.getYOnScreen() / scale);
}
注意:這不是我使用的實際代碼,我使用 javafx 之類的
var scaleX = Screen.getPrimary().getOutputScaleX();
var scaleY = Screen.getPrimary().getOutputScaleY();
但想法是一樣的,希望這有助于特色讀者。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/323155.html
