Java расположение компонента качания на экране выключено на 10 пикселей по оси x в Windows 10 - PullRequest
1 голос
/ 25 марта 2020

У меня есть JFrame, который я хотел бы расположить в верхнем левом углу моего дисплея (0,0). Я установил положение рамки с помощью setLocation(), прежде чем установить его видимым. Это приводит к правильной позиции Y, но позиция X смещена на 10 пикселей, то есть верхний левый угол рамки находится в 10 пикселях справа от края экрана. Когда я перемещаю окно ближе к левому краю, getLocationOnScreen() начинает сообщать отрицательные числа, как если бы кадр был вне экрана, а это не так. При перемещении окна полностью к правой стороне экрана getLocationOnScreen() сообщает о числах, которые подразумевают, что 10 пикселей находятся вне экрана справа. Это похоже на то, как если бы вид java / swing моего дисплея был смещен на 10 пикселей вправо.

Я проверял это в Java 8, 11 и 14 и с включенным и выключенным масштабированием дисплея с тем же Результаты. Под macOS окно находится в правильном месте.

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

public class LocationTest {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Location Test");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        frame.setLocation(new Point(0, 0));
        frame.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentMoved(ComponentEvent e) {
                super.componentMoved(e);
                System.out.println(frame.getLocationOnScreen());
            }
        });
        frame.setVisible(true);
        System.out.println("frame.getLocationOnScreen() = " + frame.getLocationOnScreen());
    }
}
...