21 Nisan 2012

Java Swing GUI - Arayüz oluşturmak (Dev-C++ Gui)









       DEV-C++ Uygulamasının java swing ile arayüzünü nasıl oluşturduk, hangi companentleri nasıl kullandık bunları anlatacağım.
      ·  private void init();
      ·  private JPanel initPanel();
      ·  private JMenuBar initJMenuBar();

Calistir.java sayfamızda Constructor metodu ile AnaPencereGui sayfamızdan yeni bir nesne oluşturarak Calistir.java dosyamız çalıştığı anda bir AnaPencereGui nesnesi oluşup çalışmaya başlayacaktır. Main metodunu Calistir.java sayfamıza yazıp çalıştırılabilir bir ortam oluşturuyoruz. Bilindiği gibi main olmadan uygulamamız çalışmaz.

                AnaPencereGui.java sayfamızda mimariye uyması açısından constructor haricinde kendi kullandığımız birkaç metot vardır. Bu metotlar şunlardır.

Öncelikle Constructor nedir? Constructor bir sayfadan yeni bir nesne oluşturulduğu anda çalışacak ilk metottur.

init() metodu hiçbir değer çağrıldığında hiçbir değer döndermez. Kullandığımız pencerenin (AnaPencereGui için JFrame kullanıldı.) özelliklerinin belirtildiği metottur.

initPanel()  metodu bir JPanel dönderir. anaPencereGui nesnesinin en temelde kullanılan panelini oluşturur. Daha sonra panel üzerinde gösterilecek tüm componentler bu panel üzerine doğrudan veya ek paneller yardımı ile eklenir.

initJMenuBar() metodu bir JMenuBar dönderir. Oluşturduğumuz menüleri bu metot içerisinde JMenuBar’a ekleyerek kullanacağımız yere (init() metoduna) göndeririz.

Calistir.java sayfamızı açıklayalım.
/*-------------------------------------Calistir.java--------------------------------------------*/package tr.org.hassamyo.hakan.test; /* paket adı */ 
import javax.swing.SwingUtilities;
public class Calistir {
         
public Calistir() {
               try {
               
        UIManager.setLookAndFeel(UIManager.getInstalledLookAndFeels()[3].getClassName());                        /* LookAndFeel (Tema) ekliyoruz */ 
               }
               
new AnaPencereGui();
               /* Bulunduğumuz sayfanın yeni ve tek seferlik kullanılabilecek bir nesnesini oluşturuyoruz */
        }

             public static void main(String[] args) {
                        /*swing bileşenleri olay güdümlü bileşen olduklarından uygulamanın ana kanalıyla deği,
                        olay gönderme kanalıyla oluşturulmalıdır. */
                        SwingUtilities.invokeLater(new Runnable() {
                                   public void run() {
                                                new Calistir();
                                               
/* Bulunduğumuz sayfanın yeni ve tek seferlik kullanılabilecek bir
                                                nesnesini oluşturuyoruz */
                                   }
                        });
            }/*main metodu*/
}/*Calistir class sonu*/

AnaPencereGui.java sayfamızı açıklayalım
/*-------------------------------AnaPencereGui.java--------------------------------------*/            
package tr.org.hassamyo.hakan.ui; /* paket adı */

import java.awt.BorderLayout; /* import dosyaları*/

public class AnaPencereGui extends JFrame {
        public AnaPencereGui() { /*Contructor metodu*/
              init();
        }/*Constructor sonu*/

       private void init() {
                 setJMenuBar(initJMenuBar());
                 /* Oluşturduğumuz JMenuBarı initJMenuBar() metodu ile alıp penceremize
                 ekliyoruz */
                 add(initPanel());
                 /* Oluşturduğumuz paneli initPanel() metodundan alıp penceremize
                 ekliyoruz */

                 setTitle("Dev-C++");
                 /*  Pencere  başlık veriyoruz. */
                 setSize(1280, 700);
                 /* Pencere boyutlarını belirliyoruz. */
                 setLocationRelativeTo(null);
                 /*Penceremiz açıldığında nerde açılacağını belirleyen metottur. null olarak
                 kullandığımızda pencereyi ortalı başlatır.*/
                 setDefaultCloseOperation(EXIT_ON_CLOSE);
                 /* Pencerenin kapatıldığında ne yapılacağını yazıyoruz.Bizim uygulamamızda
                 uygulama tamamen kapatılıyor.*/
                 setVisible(true);
                 /*  Pencere  görünmesini sağlayan metot */
       }

       private JPanel initPanel(){
                 JPanel panel = new JPanel(new BorderLayout());
                 /* Göndereceğimiz paneli oluşturup panel düzenini BorderLayout Ayarlıyoruz */

                 /*----------------------- Panel North -------------------------------*/
                 /*---------------toolbarların oluşturulup eklenmesi--------------*/
                 /* Burda Yapmak istediğimiz JToolBarları oluşturmak. JToolBarları oluştururken
                 önce bir JToolBar oluşturup sonraki JToolBarları ilk oluşturduğumuz                 JToolBarın üzerine ekleyeceğiz */

                 
JToolBar toolBar = new JToolBar();
                 /*Yeni JToolBar nesnesinin oluşturulması*/
             
                 toolBar.setFloatable(false);
                 /* Ana JToolBarın yerini sabitlemek için kullandığımız JToolBara ait metot*/

                 JToolBar mainBar = new JToolBar();
                 /* Main butonlarını ekleyebileceğimiz bir tool bar daha oluşturup
                 sabit toolbar a ekliyoruz */
                 toolBar.add(mainBar);

                 /* mainBar toolBarına ekleyecek butonları oluşturuluyor */
                 JButton mainProjectButton = new JButton(new ImageIcon( // icon ekliyoruz
                                   "C:/images/file/new_project.png")); // iconun yolunu gösteriyoruz

                 mainProjectButton.setToolTipText("New Project");
                 /* Buton üzerinde geldiğimizde açılacak bilgi baloncuğu */

                 mainBar.add(mainProjectButton);
                 /* Butonun mainBara eklenmesi */
              
                 ...

                 /*----------------------- Panel Center -----------------------*/
                 /* Orta bölüme oluşturacağımız paneli 2 bölümden oluşacağı için JSplitPane yapacağız.
   
                 JSplitPane 2 paneli birbirine bağlar. Bunun için öncelikle 2 panel oluşturacağız. Bu panellerden                   birincisi sol tarafta bulunan JTabbedPane olarak ikincisini de JPanel olarak oluşturup daha                       sonra JSplitPane ekleyeceğiz.  */

                 JTabbedPane projectTabPane = new JTabbedPane();
                 /* JTabbedPane oluşturuyoruz */

                 projectTabPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
                 /* JSplitPane ile JTabbedPane alanı küçültüldüğünde tablar alt alta gelmemesi,
                 bir ScrollBar oluşturmasını sağlar.*/

                 JPanel fileTabPanel = new JPanel();
                 /* JSplitPanein sol tarafı için oluşturduğumuz panel */

                 JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
                                                                              projectTabPane, fileTabPanel);
                 /*new JSplitPane(x,y,z)
                 ayarlanabilir alanın dik olması için x yerine "JSplitPane.HORIZONTAL_SPLIT",
                 yatay olması için "JSplitPane.VERTICAL_SPLIT" kullanabiliriz.
             
                 oluşturmuş olduğumuz paneller y ve z olarak gösterilen yerlere eklenir. */

                 JPanel projectPanel = new JPanel(new BorderLayout());
                 /* Tab Panele ekleyeceğimiz Paneli oluşturuyoruz */

                 JTree projectJTree = new JTree();
                 /*JTree bir tür liste şeklidir. klasörleri ve dosyaları bir ağaç
                 yapısında gösterir.*/

                 projectPanel.add(projectJTree);
                 /*JTree'yi JTabbedPane'e ekleyeceğimiz panele ekliyoruz*/

                 projectTabPane.addTab("Project", projectPanel);
                 /*JTabbedPane'e yeni bir tab oluşturuyoruz. Tab eklerken addTab(x,y)
                 metodunu kullanıyoruz. x yerine tabın adını, y yerine ekleyeceğimiz
                 paneli yazıyoruz. */
                 ...

                 /*----------------------- Panel Sounth -----------------------*/
                 JTabbedPane optionsJTabbedPane = new JTabbedPane();
                 /* Yeni JTabbedPane nesnesi oluşturuyoruz  */

                 JPanel compilerPanel = new JPanel();
                 /* Ana JToolBarın Panelin Üst kısmına eklenmesi */
                 optionsJTabbedPane.addTab("Compiler", compilerPanel);
                 /* Ana JToolBarın Panelin Üst kısmına eklenmesi */

                 /*----------------------- Panele eklenme -----------------------*/
                 panel.add(toolBar, BorderLayout.NORTH);
                 /* Ana JToolBarın Panelin Üst kısmına eklenme */
                 panel.add(splitPane);
                 /* JSplitPane'in Panelin orta kısmına eklenme */
                 panel.add(optionsJTabbedPane, BorderLayout.SOUTH);
                 /* JTabbedPane'in Panelin Alt kısmına eklenme */

                 return panel;
                 /* Paneli metodun çalıştırıldığı yere gönderiyoruz. */
       } /* initPanel sonu*/

       private JMenuBar initJMenuBar() {
                 JMenuBar bar = new JMenuBar();
                 /*JMenuBar oluşturuyoruz*/

                 /* Bu metotta öncelikle JMenüleri oluşturacağız. daha sonra oluşturduğumuz JMenülerin
                 içlerini gerek JMenu, JMenuItem ile gerekse JCheckBoxMenuItem ile oluşturup metodun                         çalıştırıldığı yere göndereceğiz. */
                 String[] menuStrings = { "File""Edit""Search""View""Project",
                           "Execute""Debug""Tools""CVS""Window""Help" };
                 /*burda normal oluşumdan biraz daha farklı olarak döngüyle oluşturacağız
                 bunun için gerekli bir String dizi oluşturup menü isimlerini bu dizi içerisine yazıyoruz.*/

                 JMenu[] menus = new JMenu[menuStrings.length];
                 /*bir önceki adımda String dizisi oluşturmuştuk şimdi de bir JMenu dizisi
                 oluşturuyoruz. JMenu dizisinin uzunluğunu ise menuStrings.length ile
                 String dizisinin içinden alıyoruz. */
                 for (int i = 0; i < menus.length; i++) {
                 /*Döngüyü menus.length kadar yani JMenu dizisinin uzunluğu kadar tekrarlattırıyoruz*/
                                  menus[i] = new JMenu(menuStrings[i]);
                                  /*Her Tekrarda menus dizisinin i. elemanına menuStrings dizisinin i.
                                  elemanındaki Stringi atıyor.*/
                                  bar.add(menus[i]);
                                  /* Oluşturulan i. menüyü JMenuBara ekliyor*/
                 }

             ...
                 /*---------------View menüsünün oluşturulup eklenmesi-----------------*/
                 JMenuItem fileSourceFileItem = new JMenuItem("Source File",
                                               new ImageIcon("C:/images/file/source_file.png"));
              
  /*JMenuItem nesnesi oluşturuyoruz. JMenuItem(x,y)                  x yerine görünecek String yazılır. y yerine icon eklenir */
                 fileSourceFileItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
                                                                                          ActionEvent.CTRL_MASK));
            
   /*Kısayol tuşu eklemek için setAccelerator(KeyStroke.getKeyStroke(x,y));                  x yerine KeyEvent.VK_tusAdı yazılır.  y yerine  ActionEvent.CTRL_MASK,                  ActionEvent.ALT_MASK ,ActionEvent.SHIFT_MASK gibi farklı şekillerde kullanılabilir.                  fakat sadece harf ataması yapılacaksa y yerine 0 (sıfır) yazılır */

                 
 fileNewJMenu.add(fileSourceFileItem);                  /*fileNewJMenuye eklenmesi*/

                 JMenu fileReopenJMenu = new JMenu("Reopen");                  /* yeni bir JMenu nesnesi oluşturuluyor*/

                 fileReopenJMenu.setIcon(new ImageIcon("C:/images/file/reopen.png"));                  /*fileReopenJMenu'süne icon ekliyoruz.*/ 

                 
fileReopenJMenu.setEnabled(false);                  /* fileReopenJMenu varsayılan deaktif  */ 

                 
menus[0].add(fileReopenJMenu);
                 /*File menüsüne (menus[0]) eklenmesi*/

                 ...

                 JMenu viewCompilerOutputMenu = new JMenu("Compiler Output");                  /*JMenu içine eklemek için yeni bir JMenu oluşturuyoruz.*/

                 
ButtonGroup viewCompilerOutputGroup = new ButtonGroup();                  /*İki JCheckBoxMenuItemdan birinin seçili olması için ButtonGroup nesnesi oluşturuyoruz.
                 Bu nesne herhangi bir yere eklenmez bu nesneye JCheckBoxMenuItem ekleyeceğiz*/

                 menus[3].add(viewCompilerOutputMenu);                  /*View menüsüne (menus[3]) eklenmesi*/

                 
JCheckBoxMenuItem viewAlwaysVisibleBoxMenuItem = new JCheckBoxMenuItem(
                                                                                                                             "Always Visible");                  /*JCheckBoxMenuItem nesnesi oluşturuyoruz*/

                 
viewCompilerOutputGroup.add(viewAlwaysVisibleBoxMenuItem);                  /*Oluşturduğumuz JCheckBoxMenuItem nesnesini ButtonGroup'a ekliyoruz*/

                 
viewCompilerOutputMenu.add(viewAlwaysVisibleBoxMenuItem);                  /*Oluşturduğumuz JCheckBoxMenuItem nesnesini JMenuye ekliyoruz*/
                 viewCompilerOutputMenu.addSeparator();                  /* addSeparator metodu, menüleri vs ayırt etmek için ayraç olarak kullanırız*/

                 JCheckBoxMenuItem viewOnlyWhenNeededBoxMenuItem = new JCheckBoxMenuItem(
                                                                                                                              "Only When Needed");                  /*JCheckBoxMenuItem nesnesi oluşturuyoruz*/

                 
viewOnlyWhenNeededBoxMenuItem.setSelected(true);                 /*viewOnlyWhenNeededBoxMenuItem'ın varsayılan seçili olarak belirtiyoruz.*/

                 
viewCompilerOutputGroup.add(viewOnlyWhenNeededBoxMenuItem);                 /*Oluşturduğumuz JCheckBoxMenuItem nesnesini ButtonGroup'a ekliyoruz*/

                 
viewCompilerOutputMenu.add(viewOnlyWhenNeededBoxMenuItem);                 /*Oluşturduğumuz JCheckBoxMenuItem nesnesini JMenuye ekliyoruz*/
                 ...

                 return bar;
                 /* Paneli metodun çalıştırıldığı yere gönderiyoruz. */
       }  /*initJMenuBar sonu*/
} /*Class sonu*/

Kod: Projesiyi indir

2 yorum: