29 Kasım 2018 Perşembe

Queue Arayüzü

Giriş
Bu arayüzü gerçekleştiren bir sürü sınıf var. Açıklaması şöyle.
-LinkedList uses more memory, but it shrinks when queue is emptied.
-ArrayDeque uses less memory, but it doesn't shrink.
-PriorityQueue is a non-FIFO queue with element priority.
-ConcurrentLinkedQueue, ConcurrentLinkedDeque supports multi-threaded concurrent access.
add metodu
İmzası şöyle
boolean add(E e);

remove metodu
İmzası şöyle. Kuyruk boş ise NoSuchElementException fırlatır.
E remove();


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();
}