У меня есть 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());
}
}