Проблема такая:
Установлена Windows 10
Имеется экран 1920x1080 px
По умолчанию windows ставит zoom 125% = 120dpi для этого разрешения (ну да и бог с ним)
Zoom 125% делает экран 1536x864 px
Приложение держится на Java 9 - JavaFX + Swing
Я вывожу на экран два фрейма одинаковых размеров по обеим сторонам на верху и вот такая вот картина:
Для обоих фреймов (может важно):
setAlwaysOnTop(true);
setSize(500, 252);
Устанавливаю для frameRight:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice defaultScreen = ge.getDefaultScreenDevice();
Rectangle rect = defaultScreen.getDefaultConfiguration().getBounds();
int x = (int) rect.getMaxX() - frameRight.getWidth();
jframe.setLocation(x, 0);
Как видите остается пространство и фрейм не доходит до конца.
Причем со 100% zoom = 80dpi естественно все норм.
Я уже пробовал что-то типа:
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
for (int i = 0; i < dim.width; i++) {
if (frameRight.getLocation().x + frameRight.getWidth() == dim.width) {
log.info(frameRight.getLocation().x + frameRight.getWidth() + "==" + dim.width);
break;
}
frameRight.setLocation(i, 0);
}
Ну чтобы посмотреть лог, но все очевидно 1536==1536
...и многое другое, но никак не могу понять как вычислить это пространство и минусануть его при позиционировании?
Ну и:
getLocation() = java.awt.Point[x=1036,y=0]
getLocationOnScreen() = java.awt.Point[x=1036,y=0]
По сути это получается просто медиум-математическая задача. Фреймы остаются неизменными при zoom-е, т.е. они по отношению к экрану - уменьшаются. Осталось вычислить их реальный размер на экране (так как getWith() выдает то, что в setSize(?,?)) и на сколько они увеличиваются при зуме. Но ведь увеличивается то весь экран, а не фреймы по отдельности. Поэтому задача для меня встала...
27.02.18
Поигрался руками и вот что получилось простым перебором чисел:
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
if (screen.width == 1920) {
// 100% минус 500px
setLocation(screen.width - getWidth(), 0);
} else
if (screen.width == 1536) {
// 125% минус 600px
setLocation(screen.width - getWidth() + getWidth() / 100 * (dpi - 100), 0);
} else
if (screen.width == 1280) {
// 150% минус 667px
setLocation(screen.width - getWidth() + getWidth() / 100 * (dpi - 87) + 2, 0);
} else
if (screen.width == 1098) {
// 175% минус 712px
setLocation(screen.width - getWidth() + getWidth() / 100 * (dpi - 78) + 2, 0);
}
Но это все только для моего экрана, а для других опять будет возня с перебором чисел...
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости