Windows / Linux에서 Java Swing 앱의 DPI를 설정하는 방법은 무엇입니까?
DPI가 150 이상인 모니터 (예 : Macbook Pro)를 사용하는 경우 문제를 찾을 수도 있습니다 . Java Swing 앱의 글꼴이 높은 DPI 모니터에 비해 너무 작아서 글꼴 크기를 전혀 변경할 수 없습니다 (It Windows DPI를 직접 무시하고 원래 DPI-> 96 만 표시 ). 화면 해상도를 변경하는 것 외에는 아무것도 할 수 없습니다. 이로 인해 LCD의 모든 것이 흐릿해질 수 있습니다.
예, 높은 DPI 모니터, 1920x1080 해상도의 15.6 인치 노트북을 가지고 있습니다. Matlab, Burpsuite 등과 같은 일부 Java 데스크톱 앱은 노트북에서 매우 작게 보입니다. 아주 오랫동안 인터넷을 검색해 왔습니다. 여전히 문제에 대한 방법을 찾을 수 없습니다. 를 통해 JRE 글꼴을 변경할 수 있다는 것을 알고 JRE_HOME/lib/font/fontconfig.properties.src
있지만 Java 데스크탑 글꼴의 기본 글꼴 크기 또는 DPI를 설정할 위치를 찾을 수 없습니다.
문제에 해결책이 없습니까? 높은 DPI 모니터가 있습니까? 그런 앱을 어떻게 사용합니까? Swing은 높은 DPI 사용자를 포기합니까?
현재 Windows에서이 문제를 조사하고 있습니다. 내가 찾은 내용은 다음과 같습니다.
대부분의 Swing Look & Feels는 확장 가능해야하지만 Nimbus조차도 높은 DPI를 전혀 지원하지 않습니다. Nimbus가 결국 높은 DPI 스케일링을 제공 할 수 있다는 오래된 블로그 게시물을 찾았지만 결코 그런 일이 없었습니다.
한 가지 예외는 System LAF이지만 기본 글꼴은 모든 DPI 설정에서 실제 시스템 글꼴 크기보다 ~ 10 % 작습니다. 또한 http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html에 설명 된대로 시스템을 명시 적으로 선택해야합니다.
Swing에서 설정할 수있는 단일 스케일링 요소도 없습니다. 특정 LAF는 확장을 처리하기위한 코드를 제공해야합니다. 그래서 당신이 할 수있는 최선은 시스템을 선택하고 그것이 충분하기를 바랍니다.
그러나 JavaFX는 내 시스템에서 최대 150 %까지 올바르게 자동 확장됩니다. 가능하다면 JavaFX를 사용하여 GUI를 구축하는 것이 좋습니다.
편집 : 몇 개의 작은 테스트 프로그램을 만들고 다양한 GUI 프레임 워크, 스윙 테마 및 DPI 설정에 대한 비교 스크린 샷을 찍었습니다. 이 질문을 읽는 사람들에게 유익 할 수 있습니다 : http://kynosarges.org/GuiDpiScaling.html
짧은 대답 : JRE 9에서 실행해야합니다.
긴 대답 :
이것은 자바 런타임이 "DPI 인식"이라고 선언했지만 실제로 AWT 및 Swing을 지원하지 않았기 때문입니다. Java 애플리케이션은 적절한 크기가 아닌 픽셀을 기반으로 크기가 조정되고 렌더링되었으며 여기에는 HiDPI 디스플레이가 포함되었습니다. 어쨌든 이것은 최근에 해결되었습니다. JEP 263 : Windows 및 Linux의 HiDPI Graphics 및 업그레이드 문제를 참조하십시오 .
따라서 글꼴 크기를 늘려도 작동하지 않습니다 (나머지 항목이 늘어나지 않기 때문입니다). jvm 인수 -Dsun.java2d.dpiaware=false
는 작동하지 않습니다 (실제로 지원되지 않기 때문에). 매니페스트 파일 + 레지스트리 편집 (Windows 용)은 작동하지 않습니다.
솔루션 : 실제로이 기능을 지원하므로 JRE 9에서 실행해야합니다.
내 실험에 따르면 Linux 에서는 스윙 모양과 느낌으로 확장하는 것이 불가능한 것 같습니다. 그러나 VNC, vncdesk 관련 해킹을 사용하여 수행 할 수 있습니다 . 다음은 gradle --gui
vncdesk 에서 실행하기위한 구성입니다 .
.vncdesk/1/settings.ini
:
[desktop]
width = 1050
height = 650
[window]
title = gradle
name = gradle in vncdesk
class = GradleInVncdesk
scale_factor = 2
.vncdesk/1/startup
:
#!/bin/sh
cd "$INVOCATION_DIR"
matchbox-window-manager&
exec gradle --gui "$@"
다음 지침에 따라 문제를 해결했습니다. Link .
독일어로되어 있지만 중요한 내용은 번역하겠습니다.
이 레지스트리 키를 만듭니다.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide]
"PreferExternalManifest"=dword:00000001
이 콘텐츠로 매니페스트 파일을 만듭니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*">
</assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b">
</assemblyIdentity>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</ms_windowsSettings:dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
에 java.exe 및 javaw.exe가 내부이며 이름 bin 디렉토리에 복사 java.exe.manifest
하고 javaw.exe.manifest
(당신은 동일한 콘텐츠하지만 서로 다른 이름을 가진 두 개의 파일이있을 것이다).
HTH.
Bernd
참고 URL : https://stackoverflow.com/questions/15659044/how-to-set-the-dpi-of-java-swing-apps-on-windows-linux
'Development Tip' 카테고리의 다른 글
Pandas Dataframe에서 dtype을 개체로 사용하는 열을 문자열로 변환하는 방법 (0) | 2020.11.15 |
---|---|
__repr __ () 함수에 대한 최상의 출력 유형 및 인코딩 방법? (0) | 2020.11.15 |
"최상위 JSON 어레이"란 무엇이며 보안 위험이있는 이유는 무엇입니까? (0) | 2020.11.15 |
Android에서 ARM EABI v7a 시스템 이미지를 사용하는 방법은 무엇입니까? (0) | 2020.11.15 |
변환 생성자 대 변환 연산자 : 우선 순위 (0) | 2020.11.15 |