2009-07-09 28 views
8

Tôi có một ứng dụng Java bằng cách sử dụng Substance LookAndFeel với Windows làm nền tảng đích và tôi muốn tăng cài đặt DPI của ứng dụng mà không cần thay đổi cài đặt hệ thống.Tôi có thể đặt độ phân giải DPI của ứng dụng Java Swing mà không thay đổi cài đặt DPI của hệ thống không?

Tôi muốn làm điều này bởi vì tôi không muốn buộc người dùng phải khởi động lại Windows và vì nhiều ứng dụng Windows dường như có vấn đề với các thiết lập DPI rất cao (> 120)

PS: Tôi biết rằng LaF chất cho phép mở rộng kích thước phông chữ trong thời gian chạy, nhưng theo cách đó chỉ có chiều cao của các điều khiển của tôi được thu nhỏ, không phải chiều rộng. Tôi muốn GUI của tôi được thu nhỏ hoàn toàn vì nó sẽ xảy ra nếu tôi thiết lập cài đặt DPI của hệ thống.

+1

+1, chỉ cần hỏi điều tương tự. :) – Epaga

Trả lời

5

Không biết nếu có thể. Cái nhìn & cảm thấy sẽ phải hỗ trợ nó, và theo như tôi biết, Windows Look & Cảm thấy không. Đây là một hack mà bạn có thể xem xét: Lặp lại tất cả các phông chữ được định nghĩa trong giao diện của bạn & cảm nhận và xác định lại chúng to hơn một chút. Dưới đây là một đoạn mã mà thực hiện điều này:

for (Iterator i = UIManager.getLookAndFeelDefaults().keySet().iterator(); i.hasNext();) { 
    String key = (String) i.next(); 
    if(key.endsWith(".font")) { 
     Font font = UIManager.getFont(key); 
     Font biggerFont = font.deriveFont(2.0f*font.getSize2D()); 
     // change ui default to bigger font 
     UIManager.put(key,biggerFont); 
    } 
} 

Tôi cho rằng bạn có thể mất một bước xa hơn và xác định lại biên giới quy mô tương ứng là tốt, nhưng điều đó bị rất phức tạp rất nhanh chóng

+0

Câu trả lời hay nhất cho đến nay :) –

+1

Nếu 'UIManager' của bạn có các khóa không phải là' Chuỗi', thì điều này sẽ ném ra một 'ClassCastException'. – uckelman

+0

Không hoạt động do chuyển đổi thành chuỗi. – Pavel

1

Vì vậy, câu trả lời thực tế dường như là: không bạn không thể. Đó thực sự là một bummer vì đó là một nỗi đau để kiểm tra.

1

Có thể, nhưng bạn cần chạy nó trên JRE 9.

Điều này là do thời gian chạy Java tự khai báo là "DPI-aware" nhưng không thực sự hỗ trợ nó cho AWT và Swing. Các ứng dụng Java đã được định cỡ và hiển thị dựa trên các pixel thay vì được thu nhỏ một cách chính xác, điều này bao gồm các màn hình HiDPI. Dù sao, điều này gần đây đã được giải quyết. Xem sự cố JEP 263: HiDPI Graphics on Windows and Linuxupgrade.

Vì vậy, tăng kích thước phông chữ không hoạt động (vì nó không làm tăng phần còn lại của sự vật); đối số jvm -Dsun.java2d.dpiaware=false không hoạt động (vì nó không thực sự được hỗ trợ); và tệp kê khai + chỉnh sửa đăng ký (dành cho Windows) không hoạt động.

Giải pháp: Bạn cần chạy trên JRE 9 vì nó thực sự hỗ trợ tính năng này.

Các vấn đề liên quan