29 Kasım 2018 Perşembe

Swing UIManager Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
Bu sınıf normalde main metodunda çağrılır. EventQueue.invokeLater içinde çağırmaya gerek yok.

getCrossPlatformLookAndFeelClassName metodu
Şöyle yaparız. Windows'ta "javax.swing.plaf.MetalLookAndFeel" sonucunu alırız.
String plaf = UIManager.getCrossPlatformLookAndFeelClassName();
getDefaults metodu
Şöyle yaparız.
javax.swing.UIDefaults defaults = UIManager.getDefaults ();
getInstalledLookAndFeels metodu
Şöyle yaparız.
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
  if ("Nimbus".equals(info.getName())) {
    UIManager.setLookAndFeel(info.getClassName());
    break;
  }
}
Benim sistemimde kurulu LookAndFeelInfo nesneleri şöyle
Metal
Nimbus
CDE/Motif
Windows 
Windows Classic
Bunlardan en iyisi Nimbus. Açıklaması şöyle. Java  5'teki XMl tabanlı "Synth Look And Feel" dan daha iyi.
Nimbus is a polished cross-platform look and feel introduced in the Java SE 6 Update 10 (6u10) release.
Nimbus'taki Vertical Scrollbar kaybolmasını gidermek için şöyle yaparız.
LookAndFeel lookAndFeel = UIManager.getLookAndFeel();
UIDefaults defaults = lookAndFeel.getDefaults();
defaults.put("ScrollBar.minimumThumbSize", new Dimension(30, 30));
getLookAndFeel metodu
Şöyle yaparız.
LookAndFeel lookAndFeel = UIManager.getLookAndFeel();
getLookAndFeelDefaults metodu

getSystemLookAndFeelClassName metodu
Örnek
Şöyle yaparız. Windows'ta "com.sun.java.swing.plaf.WindowsLookAndFeel" sonucunu alırız.
String plaf = UIManager.getSystemLookAndFeelClassName();
Örnek
Şöyle yaparız.
try {
  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
           | UnsupportedLookAndFeelException ex) {
  ex.printStackTrace();
}
put metodu - Object + Object
Birinci parametre key, ikinci parametre value nesnesidir.
Örnek
RadioButton arkaplan rengini değiştirmek için şöyle yaparız.
javax.swing.UIManager.put("RadioButton.background", Color.GRAY);
Örnek
Fontların büyüklüğünü değiştirmek için şöyle yaparız.
private static double getScaleForScreenSize() {

    double screenSize = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
    return screenSize / 1400; //assuming app looks good at 1400
}

//source: https://stackoverflow.com/a/26877737/3992939
private static void setDefaultSize(double scale) {

  Set<Object> keySet = UIManager.getLookAndFeelDefaults().keySet();
  Object[] keys = keySet.toArray(new Object[keySet.size()]);

  for (Object key : keys) {
    if ((key != null) && key.toString().toLowerCase().contains("font")) {
      Font font = UIManager.getDefaults().getFont(key);
      if (font != null) {
        font = font.deriveFont((float)(scale * font.getSize()));
        UIManager.put(key, font);
      }
    }
  }
}
Çağırmak için şöyle yaparız.
setDefaultSize(getScaleForScreenSize());
setLookAndFeel metodu - LookAndFeel
Örnek
Substance kütüphanesini kullanmak için şöyle yaparız.
UIManager.setLookAndFeel(new SubstanceSaharaLookAndFeel());
Örnek
İşletim sisminin kendi LookAndFeel'ini kullanmak için şöyle yaparız.
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
setLookAndFeel metodu - string
string olarak LookAndFeel metodunun class name'ini alır.
Örnek
Şöyle yaparız.
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
Örnek
Şöyle yaparız.
for (UIManager.LookAndFeelInfo laf: UIManager.getInstalledLookAndFeels()) {
  if ("Nimbus".equals(laf.getName()) {
    UIManager.setLookAndFeel(laf.getClassName());
    SwingUtilities.updateComponentTreeUI(frame);
  }
}
Örnek
Şöyle yaparız.
try {
  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException |
         UnsupportedLookAndFeelException ex) {
  ex.printStackTrace();
}

Hiç yorum yok:

Yorum Gönder