2016-10-09 16 views
5

En yeni Java 9 erken erişim sürümünü indirip yükledim ve Windows'ta bir Java Swing uygulamasının bileşenleri şimdi doğru boyutta oluşturduğunu bulmaktan çok memnun oldum. Artık HiDPI ekranlı müşterilerim, uygulamamı istenen genişlik ve yükseklikte kullanmak zorunda kalmıyor.Java 9, HiDPI ekranında daha yüksek çözünürlüklü görüntüler nasıl kullanılır?

Ancak, Swing uygulamasında kendi simgelerin sadece genişlik ve yüksekliği ikiye katlamak için ölçeklendirildiklerini fark ettim;

Normal boyutta (örn. Foobar.png) ve çift genişlik/yükseklikte (örn. [email protected]) tüm simgelerin tam bir kümesine sahibim. Apple adlandırma kurallarını kullanıyorum.

Java 9'u el ile kodlamak zorunda kalmadan, görüntünün yüksek çözünürlüklü sürümünü kolayca bulmak ve kullanmak için nasıl kullanabilirim?

Bir kod örneği her zaman bir soru daha netleştirir, bu nedenle aşağıdaki kodun derlenmesini ve çalıştırılmasını sağlamak için kullanabileceğim bir çoklu çözünürlüklü simge sınıfına sahip Java 9 var mı?

import javax.swing.*; 

public class ScratchSpace { 

    public static void main(String[] args) throws Exception { 
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     SwingUtilities.invokeLater(() -> { 
      JFrame frame = new JFrame("I work in HiDPI!"); 

      // can I replace the following line with some magical new method that automatically loads the same icon at multiple resolutions 
      // so that Swing chooses the correct one when rendering, depending on the current scale of the current display? 
      Icon icon = new IconWithMultipleSizes("foobar.png"); 

      JLabel label = new JLabel("I'm a label with an icon.", icon, SwingConstants.LEFT); 
      frame.setContentPane(label); 

      frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
      frame.pack(); 
      frame.setLocationRelativeTo(null); 
      frame.setVisible(true); 
     }); 
    } 
} 

Sanırım böyle bir sınıf olmalı, ancak bulamıyorum.

+0

Şimdiye kadar Java 9'da java.awt.image.MultiResolutionImage adlı bir sınıf buldum. Hala işe nasıl başlayacağımıza dair bilgi arıyorum. –

cevap

1

Java 9 kaynak kodunu kullanmayı denedikten sonra, Java API'sinde bir MultiResolutionImage sınıfı bulunmasına rağmen, Windows'da java.awt.Toolkit tarafından henüz kullanılmıyor. Java 9 MultiResolutionImage örneklerini oluşturma kodu, java.awt.Toolkit'in OS X'e özgü örneğinde bulunur.

Benim varsayım bu OpenJDK this bölümünde Java 9.

+3

Ayrıca bakınız [* JEP 251: Çok Çözünürlüklü Görüntüler *] (http://openjdk.java.net/jeps/251). – trashgod

+0

BaseMultiResolutionImage için geçerli olan dokümanlar, bir şekilde çizildikleri grafik nesnesinin DPI'sine baktığını ve en küçük kullanılabilir görüntüyü seçtiğini, ancak bunu yapmak için grafik nesnesini nasıl kullandığını açık bir şekilde görmüyor görünmektedir. – Trejkaz

0

için HiDPI desteği ekleyerek bir parçası olarak Oracle'ın yapılacak listesinde hala java.awt.Image için bir API açıklar olmasıdır. java.awt.Graphics, DPI metriklerine dayanarak doğruyu almak içindir. O zamana kadar DPI ölçekli bir faktör olup olmadığını kontrol edemezsiniz, sonra görüntüyü bu DPI ölçeğinin çözünürlüğü ile çizebilirsiniz. Ama bu sinir bozucu olurdu.

Ancak, this other page'un çok çözünürlüklü görüntüler arasında ayrım yapabilecek bir sınıfı var gibi görünüyor, sadece onu içe aktarmanız gerekir.

Hala bu ikinci bağlantıya bakarak onu nasıl çalıştıracağımı görüyorum, ama umut verici görünüyor.

+0

"DPI ölçek katsayısını kontrol edebilirsiniz" ... Windows'da Java 9'da bunu yapmanın bir yolunu bulamadım ... bir yol biliyor musunuz? –

İlgili konular