Migrene bire bir Miglayout.

6 July, 2009 (09:00) | Programming | By: selcuk

Swing frame tasarımını yapmak bazen çok acı veren bir tecrübeye dönüşebiliyor. Visual Studio’nun yada Delphinin form tasarım kaabiliyetlerine kıyasla,  Swing’in standart layoutlar o kadar çelimsiz ve kullanışsız ki…

Netbeans ve grouplayout ile bu problem bir hayli çözülmüş görünse de,  Eclipse’inizi terk edemiyorsanız, standart layoutlar ile frame’inizi kodlamak zorundasınız. Fakat maalesef standart layoutlar gerçekten şaka gibi. Basit bir frame için saatlerce vakit harcamanız işten bile değil. Bu noktada yardımınıza Miglayout koşuyor. Bir “Mig” pilotu olan Mikael Grev tarafından open source geliştirilmiş.  Miglayout muhtemelen Java 7 de standart layoutlarla birlikte Java SE içerisine koyulacak.

Bir kaç örnek ile bakalım.

Miglayout’un kullanılarak yapılan güzel bir liste frame’i yapalım.

package com.devx.miglayout.swing;

import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

import net.miginfocom.swing.MigLayout;

/**
*
* Miglayout kullanımı gösteren bir örnek. Bir liste frame'i.
*
* @author selcuk
*
*/
public class AppClient {

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
JFrame f = new JFrame("Deneme");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new MigLayout("", "[fill,grow][]"));

f.add(new JButton("BİRİNCİ"), "wrap,span");
f.add(new JButton("İKİNCİ"));
f.add(new JButton("İKİNCİ.1"), "wrap, growx 0");
f.add(new JButton("ÜÇÜNCÜ"), "growy,pushy,wrap,span");
f.add(new JButton("DÖRDÜNCÜ"), "wrap,span");
f.add(new JButton("BEŞİNCİ"), "span");

f.setVisible(true);

f.setSize(new Dimension(500, 500));
f.setLocationRelativeTo(null);
}
});

}
}

Sonuç:

miglayout

Yukarıda gördüğünüz gibi, “ÜCÜNCÜ” component, boşta kalan bütün alanı kaplayacak şekilde genişliyor. Diğer satırların yükseliği değişmiyor. Bunu sağlayan growy,pushy belirteçleridir.

Yine “İKİNCİ” ve “İKİNCİ.1″ den oluşan satırda, bütün genişliği “İKİNCİ” component almaktadır. Frame’ı genişletseniz bile bütün genişlik “İKİNCİ” component’a aktarılacaktır.

Buna yakın bir formu bir liste gösterme ve o liste üzerinde filitreleme frame’i olarak kullanıyoruz.

Bir başka Miglayout örneği de edit frameleri için oluşturalim;

package com.devx.miglayout.swing;

import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UnsupportedLookAndFeelException;

import net.miginfocom.swing.MigLayout;

/**
*
* Miglayout kullanımı gösteren bir örnek. Edit işlemi için tasarlanmış bir frame.
*
* @author selcuk
*
*/
public class AppClient2 {

public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException,
UnsupportedLookAndFeelException {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame("Deneme");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new MigLayout("wrap 2", "[right][left]"));

f.add(new JLabel("Adı:"));
f.add(new JTextField(), "pushx,growx");

f.add(new JLabel("Soyadı:"));
f.add(new JTextField(), "pushx,growx");

f.add(new JLabel("Web adresi:"));
f.add(new JTextField(), "pushx,growx");

f.add(new JLabel("e-posta :"));
f.add(new JTextField(), "pushx,growx");

f.add(new JSeparator(JSeparator.HORIZONTAL), "span,growx");

f.add(new JButton("Kaydet"), "span, split 4");
f.add(new JButton("Vazgeç"), "span, split 4");

f.setVisible(true);

f.setSize(new Dimension(500, 240));
f.setLocationRelativeTo(null);
}
});

}
}
Miglayout edit frame-sample2

Miglayout edit frame-sample2

Java 7 ye koyulup koyulmaması ile ilgili oylaması devam ediyor.

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6530906

Miglayout ‘un web sitesi

http://www.miglayout.com

Kolay gelsin.

Write a comment