GUI NEDIR?
GUI (Graphical User Interface) , yani grafiksel kullanıcı arayüzü , program ile kullanıcı arasında görsel,sezgisel,kullanıcı dostu (user friendly) ,kolay ve pratik bir ilişki kuran , kullanıcıyı bilgisayar hakkında teknik bilgi sahibi olma zorunluluğundan kurtaran, bilgi giriş/çıkışının sağlandığı arayüze denir.Her işletim sistemi kullanıcısına en iyisini sunabilmek için hem görsel açıdan zevk sahibi , hem de kullanıcı dostu bir arayüz sunmak ister.Bir programcının , ürettiği programın iyi bir arayüze sahip olabilmesi için GUI programlamaya hakim olması gerekmektedir.Programı yazdığınız dil işletim sisteminin çekirdeğinde saklı GUI sınıflarını-API’leri kullanabilir veya daha profesyonel çalışarak kendi çizim prosedürlerinizi kullanabilir,kendi arayüz sisteminizi oluşturabilirsiniz.
Bir GUI örneği:
JAVASCRIPT VS GUI:
Java dili GUI için AWT (Abstract Window Toolkit) ve SWING kütüphanelerini kullanır.Java’da arayüz ihtiyacı için oluşturulmuş ilk kütüphane AWT ‘dir.Fakat AWT’nin bazı yetersizliklerinden dolayı yeni bir bileşen setine ihtiyaç duyulmuştur.Ortaya çıkan bu yeni bileşen seti SWING ‘tir. AWT’nin geliştirilmesinin durdurulmasının ana sebebi Java ‘nın temel politikası olan “Bir kere yaz , her yerde çalıştır” mantığına uygun olmaması idi.Java dilinde yazılan uygulamalar derlenmeden önce bir interpreter ile .class uzantılı dosyalara çevrilir.Bu dosya bir arakoddur ve her sistemde aynı sonucu üretecek biçimde çalışması amaçlanmıştır.Yani aynı kodu windows işletim sisteminde de linux işletim sisteminde de çalıştırabilirsiniz.Fakat AWT ile yazılan programlar farklı sistemlerde tutarsız sonuçlara sebep oluyor hatta bazı durumlarda çalışma hatalarına kadar uzanıyordu.Swing kütüphanesi hem taşınabilir uygulamalar yazmak için hemde GUI ‘de gerekli tüm araçları sağlaması için gerekli tüm bileşenlere sahip devasa boyutta bir pakettir.
Aslında swing kütüphanesi sıfırdan oluşturulmuş değildir.AWT üzerine kurulmuş bir kütüphanedir ve awt’ye ait bir çok sınıfı halen kullanmaktadır.AWT’nin eksik yönlerini kapatır ve artılarını da kendine katar.Örneğin olay yakalama mekanizması için java’da halen awt.event paketleri kullanılır.Java ‘nın 1.2 versiyonuyla birlikte kullanılmaya başlanana swing’te her widget , platforma bağımlı olarak değil , swing’e bağlı olarak çalışır.
SWING MIMARISI
Java , program geliştirmede MVC Yapısını (Model-View-Controller) kullanır.Yani programın hesap-kitap-işlem kısmına dair model kısmı ve GUI’ye dair view kısmı birbirinden ayrılmıştır.Bu yaklaşım program geliştirilmesinde programcılara büyük kolaylık sağlamaktadır.Controller tarafında ise bu iki birim birbiri ile entegre olarak çalıştırılır.Fakat javada model ile controller arasındaki sınır kesin olarak birbirinden ayrılmaz.
Swing mimarisi iki temel üzerine kuruludur :
1. Bileşenler ( Components ) : JFrame,Jlabel,Jbutton,JTextField,Jcombobox,Jradiobutton,Jcheckbox,Jtogglebutton,Jtable,Jlist,Jscroolpane,Jtabbedpane
2. Konteynerlar ( Containers )
Bileşen seti gerekli tüm görsel araçları içerir.Yazı,resim içerikleri için labellar , yazı kutuları , kaydırma çubukları , menüler , pencere bileşenleri vs. tüm bileşenler component sınıfından türemiştir.
Konteyner ise bileşenlerin üzerinde tutulacağı veri modelleridir.Tüm bileşenler bir konteyner üzerinde tutulmak zorundadır.Bu nedenle her GUI uygulaması en az bir konteynera sahip olmak zorundadır.
Java’da konteynarlar içiçe tanımlanabilir.En dıştaki konteyner tüm bileşen ve iç konteynerları tutan top-level konteynerlardır.Bunun altında bulunanlar ise kapsayıcı konteyner olarak anılır. Tüm bileşenlere ait sınıf diyagramı aşağıdadır.
PENCERE OLUŞTURMA : CONTAINER
ontainer nesneleri, bileşenleri üzerlerinde tutmaya yararlar.
Örnek : Container1
mport java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class dugme extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
public dugme()
{
super(“Kutu Başlığı”);
Container kont= getContentPane();
kont.setLayout(new FlowLayout());
setSize(400,400);
setVisible(true);
}
public static void main (String Args[])
{
dugme uygulama = new dugme();
}
}
PENCERE OLUŞTURMA : JFrame
Java bileşenlerine geçmeden önce Jframe nesnesini ve bu nesnenin metodlarını öğrenmemiz gerekmektedir. Jframe nesnesi üzerinde GUI bileşenlerini tutar ve temel pencere metodları ile pencere olaylarının gerçekleştirilmesini sağlar. Bundan sonraki işleyeceğimiz tüm nesneler Jframe üzerine konumlandırılacaktır.
Örnek: JFrame1
mport javax.swing.Jframe;
import javax.swing.SwingUtilities;
public class Example extends JFrame {
public Example() {
setTitle(“JFrame Örnek”);
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Example ex = new Example();
ex.setVisible(true);
Örnek: JFrame2
import javax.swing.JButton;
import javax.swing.JFrame;
public class FrameDemo extends JFrame
{
public FrameDemo()
{
this.setTitle(“FrameDemo Test”);
this.setSize(640 , 480);
this.setLayout(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args)
{
new FrameDemo();
}
}
Oluşturulan sınıf JFrame sınıfından türetilmiş olduğu için bir frame ‘e ait tüm özellik ve metodları miras alır.Böylece kurucu metod çağrıldığında yeni bir penceremiz olur.
setTitle(String) metodu pencere başlığını ,
setSize(int,int) metodu pencere boyutunu ,
setLayout(Layout) metodu pencere yerleşim düzenini ayarlar.
(layout konusuna ayrıntılı olarak değinilecektir)
setVisible(boolean) true parametresi ile pencereyi görünür kılar.
setDefaultCloseOperation() metodu ise varsayılan pencere kapanış davranışını ayarlar.
JFrame sınıfı daha birçok metoda sahiptir.Bu metodlar kurucu tarafından varsayılan parametrelerle çağırılır.Örneğin setVisible() metodunun varsayılanı false ‘dır.Yani biz true olarak değiştirmezsek sınıf üretilse dahi pencere görünmez.Başka bir örnek ise setLocation() metodu olarak verebilirim.Biz bu metodu çağırmadığımız halde penceremizin varsayılan başlangıç koordinatları (0,0) dır.
Labels – Etiketler : JLabel
GUI bileşenleri içerisinde en sık kullanılan bileşenlerden biri de label, yani etiketlerdir. Etiket bir metin veya resmin GUI üzerine basılmasında kullanılır. Görsellik amacıyla kullanıldığı gibi, buton olarak da kullanılabilir. Tek fark JButton sınıfında listener olarak ActionListener kullanırken, JLabel için MouseListener kullanılır. Swing’te label için kullanılan sınıf JLabel sınıfıdır.
Örnek verelim;
Bu örnekte gördüğünüz üzere label, hem resim hem metin görüntüleme amacıyla kullanılabilir. Fakat görüntülenen metinler de aynen resimler gibi label üzerine “çizilir”. Yani metnin string özelliği kalmaz. Bu nedenle TextField gibi düzenlenebilir metin kutusu amacıyla kullanılmaz.
Buton yapımı ve mouse listener sınıflarının kullanımı ;
Örnek :Jlabel1;
}
import javax.swing.JFrame;
import javax.swing.JLabel;
public class JLabelDemo{
public static void main(String[] args) {
JFrame frame = new JFrame(“JLabel”);
JLabel label = new JLabel(“JLabel Ornek”);
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setSize(300, 100);
frame.setVisible(true);
}
JLabel Swing sınıfının bir elemanıdır.Belirlediğiniz yazıyı ekranda sabitler.
Jlabel Kullanım şekilleri:
JLabel( ) sadece JLabel oluşturur.Ne yazı ne de başka bir şey içermez.
JLabel(Icon image ) belirlenen görüntü ile JLabel oluşturur.
JLabel(Icon image , int horizantalAlingnment) belirlenen görüntü ve yatay hizalı JLabel oluşturur.
JLabel(String text) yazı içeren JLabel oluşturur.
JLabel(String text , Icon image , int horizantalAlingnment) metin ,resim ve yatay hizalı JLabel oluşturur.
JLabel(String text , int horizantalAlingnment) metin ve yatay hizalı JLabel oluşturur.
JTEXTFIELD:
Oluşturduğumuz pencerelerde satır halinde yazı girişi yapabilmek için JTextField ları kullanırız. JTextfield ların kullanım şekilleri aşağıdaki gibidir:
public JTextField( ) yeni JTextField oluşturmamızı sağlar
public JTextField(int columns) belirtilen sütun sayısı uzunluğunda JTextField oluşturur
public JTextField(String text) belirtilen text’i içeren JTextField oluşturur
public JTextField(String text,int columns) belirtilen text’i içeren sütun uzunluğunda JTextField oluşturur
Örneğin 10 uzunluğundaki JTextField oluştumak istediğimizde aşağıdaki gibi olmalıdır
JTextField text = new JTextField(10) ;
Daha sonra bunu JFrame’e eklemek için (JFrame nesnemiz frame olsun)
frame.add(text) ;
yapmalıyız.”text”in içne yazı eklemek istersek “setText( )” metodunu kullanmak işimizi görecektir.
text.setText(“Thank you”);
“getText( )” metodu ise “text” in içerisindeki string ifadeyi geri dönderir.
String metin = text.getText( );
JTextField gizlenebilir yapıdadır.Yani kullanıcının metin girmesini engelleyebiliriz.Bunun için
“setEditable( )” metodunu kullanmamız yeterli olacaktır.Eğer
text.setEditable(false)…………………JTextField’a kullanıcı yazı yazamaz
text.setEditable(true)………………….JTextField’a kullanıcı yazı yazabilir
PENCEREYE BUTON EKLEME : JButton
JFrame’e buton eklemek için JButton’u kullanırız.JButton’un kullanım şekilleri aşağıdaki gibidir:
public JButton( ) yeni bir buton oluşturur(Butonda yazı içermez
public JButton( Icon icon) belirtilen resim veya ikon ile bir buton oluturur
public JButton(String text) belirtilen yazı butonun üstünde olacak şekilde yeni bir buton oluşturupublic JButton(String text,Icon icon) resim ve yazı içeren bir buton oluşturur
public JButton(Action a) belirtilen türde bir olayı sağlayan buton oluşturur(Action bir Java sınıfıdır)Örneğin üzerinde “Basma” yazan bir JButton oluşturalım:
JButton buton = new JButton(“Basma”) ;
JButton oluşturmanın bir diğer yolu ise “add( )” foknsiyonunu kullanmaktır.
frame.add(new JButton(“Buton”)) ;
“setText( )” metoduyla JButton’un üzerindeki yazıyı değiştirebiliriz.
buton.setText(“Hazır olduğunda bas”) ;
Örnek:JButton1
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.HeadlessException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class JDemo extends JFrame{
public JDemo( ){
super(“JTextField–JButton”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 150)
JLabel baslik = new JLabel(“JtextField & Jbutton Ornek”);
baslik.setFont(new Font(“Arial”,Font.BOLD, 16));
JLabel isim = new JLabel(“Isminizi yaziniz :”);
JTextField name = new JTextField(12);
JButton buton = new JButton(“Devam”);
setLayout(new FlowLayout());
add(baslik);
add(isim);
add(name);
JCOMBOBOX
ComboBox ‘ i kullanmak icin önce JComboBox sınıfına ait bir nesne oluşturuyoruz.Daha sonra “addItem( )” metodunu kullanarak JComboBox ‘ ın içerisine alternatif seçimlerimizi ekliyoruz
JComboBox comboBox = new JComboBox( );
comboBox.addItem(“deneme1”);
comboBox.addItem(“deneme2”);
Ayrıca bir String dizisini de direk olarak JComboBox ‘ a ekleyebiliriz
String[ ] dersler = {“Matematik”,”Fizik”,”Kimya”};
JComboBox comboBox = new JComboBox(dersler);
Örnek: JCombobox1
import java.awt.FlowLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class JComboBoxDemo extends JFrame{
String[] dersler = {“C#”,”C”,”C++”,”Java”};
JComboBox comboBox = new JComboBox(dersler);
public JComboBoxDemo( ){
comboBox.addItem(“Php”);
comboBox.setSelectedIndex(3); /*Burada dizinin 3. ogesi secilmistir.Ilk
program calistiginda “Java” secili olacaktir*/
//Object x = comboBox.getSelectedItem( );
add(comboBox);
//int x = comboBox.getMaximumRowCount( );
//System.out.println(x)
setLayout(new FlowLayout( ));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 200);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
JComboBoxDemo demo = new JcomboBoxDemo( );
}
}
JRADIOBUTTON
JRadioButton u tek bir seçeneği seçmek için gibi durumlarda kullanırız. Bu sayede kullanıcıya bir çok veri verip sadece birtanesini seçmesini sağlayab iliriz. Jradibo button bileşenlerini kullanacağımız zaman bunları grup içerisinde yapılandırmamız daha doğru olur.
Örnek:JRadioButon1
import java.awt.FlowLayout;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JRadioButton;
import javax.swing.SwingUtilities;
public class JRadioButton1 extends JFrame {
public JRadioButton1() {
super(“Swing JRadioButton Demo”);
JRadioButton option1 = new JRadioButton(“Linux”);
JRadioButton option2 = new JRadioButton(“Windows”);
JRadioButton option3 = new JRadioButton(“Macintosh”);
ButtonGroup group = new ButtonGroup();
group.add(option1);
group.add(option2);
group.add(option3);
setLayout(new FlowLayout());
add(option1);
add(option2);
add(option3);
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new JRadioButton1().setVisible(true);
}
});
}
}
JCHECKBOX
Jcheckbox JRadioButton bileşenine çok benzer fakat bir yön ile bu bileşenden ayrılır burada birden fazla seçenek işaretlenebilir ve buna göre işlem yapılabilir. Kullanıcının mouse tıklayarak seçim yapmasını sağlayan Swing bileşenidir. Kullanim şekilleri aşağıdaki gibidir.
JCheckBox box1 = new JCheckBox( ); //Yazı ve seçim yoktur
JCheckBox box2 = new JCheckBox(“Deneme”); //Sadece yazı var seçili değil
JCheckBox box3 = new JCheckBox(“Deneme”,false); //Yazı var seçili değil
JCheckBox box4 = new JCheckBox(“Deneme” , true); //Yazı ve seçili
JCheckBox ‘ ın yazısını değiştirmek için “setText(String)” metodunu kullanırız box1.setText(“Çay”, true);
JCheckBox ‘ ın yazısını geri döndermek için “getText( )” metodunu kullanırız
String deneme = box1.getText( ); //”deneme” stringi “box1” deki yazana eşit oldu
JCheckBox ‘ı seçili yapmak ya da yapmamak için “setSelected( )” metodu kullanılır.Eğer “true” olursa seçili “false” olursa seçilmemiş olur
box1.setSelected(true); // Şuan seçilmiş durumdadır
box1.setSelected(false); //Şuan seçilmemiş durumdadır
JCheckBox ‘ın seçili olup olmadığını kontrol etmek için “isSelected( )” metodunu kullanabiliriz
if(box1.isSelected){
// Yapmak istediğiniz işlemler buraya yazılabilir
}
Örnek: JCheckBox1
Jcheckbox JRadioButton bileşenine çok benzer fakat bir yön ile bu bileşenden ayrılır burada birden fazla seçenek işaretlenebilir ve buna göre işlem yapılabilir. Kullanıcının mouse tıklayarak seçim yapmasını sağlayan Swing bileşenidir. Kullanim şekilleri aşağıdaki gibidir.
JCheckBox box1 = new JCheckBox( ); //Yazı ve seçim yoktur
JCheckBox box2 = new JCheckBox(“Deneme”); //Sadece yazı var seçili değil
JCheckBox box3 = new JCheckBox(“Deneme”,false); //Yazı var seçili değil
JCheckBox box4 = new JCheckBox(“Deneme” , true); //Yazı ve seçili
JCheckBox ‘ ın yazısını değiştirmek için “setText(String)” metodunu kullanırız box1.setText(“Çay”, true);
JCheckBox ‘ ın yazısını geri döndermek için “getText( )” metodunu kullanırız
String deneme = box1.getText( ); //”deneme” stringi “box1” deki yazana eşit oldu
JCheckBox ‘ı seçili yapmak ya da yapmamak için “setSelected( )” metodu kullanılır.Eğer “true” olursa seçili “false” olursa seçilmemiş olur
box1.setSelected(true); // Şuan seçilmiş durumdadır
box1.setSelected(false); //Şuan seçilmemiş durumdadır
JCheckBox ‘ın seçili olup olmadığını kontrol etmek için “isSelected( )” metodunu kullanabiliriz
if(box1.isSelected){
// Yapmak istediğiniz işlemler buraya yazılabilir
}
JTOGGLEBUTTON
Jtoggle buton bileşenine bir kere tıkladığınızda mouse ile ikinci tıklamanıza kadar bileşen serbest kalmayacaktır.
Örnek:JToggleButton1
// JToggleButtonEvents.java
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class JToggleButton1 {
public static void main(String[] args) {
JToggleButton jtb = new JToggleButton(“Basılı”);
jtb.addActionListener(new ActionListener( ) {
public void actionPerformed(ActionEvent ev) {
System.out.println(“ActionEvent!”);
}
});
jtb.addItemListener(new ItemListener( ) {
public void itemStateChanged(ItemEvent ev) {
System.out.println(“ItemEvent!”);
}
});
jtb.addChangeListener(new ChangeListener( ) {
public void stateChanged(ChangeEvent ev) {
System.out.println(“ChangeEvent!”);
}
});
JFrame f = new JFrame( );
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = f.getContentPane( );
c.setLayout(new FlowLayout( ));
c.add(jtb);
f.pack( );
f.setVisible(true);
}
}
JTable
Jtable verileri satırlar ve sütünlar olarak görmeye yarayan bir bileşendir.
Örnek:JTable1
//Kodlar
//jTableKullanimi Sınıfı
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class jTableKullanimi extends JFrame {
private JPanel contentPane;
private JTable table;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
jTableKullanimi frame = new jTableKullanimi();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public jTableKullanimi() {
setTitle(“JTable Kullanlanımı”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(28, 28, 396, 173);
contentPane.add(scrollPane);
table = new JTable();
scrollPane.setViewportView(table);
//Comboboxta olduğu gibi burdada bir model oluşturuyoruz.
//Fakat comboboxtan farklı olarak 2 adet dizi alıyor.
//ilk dizi 1 boyutlu dizi bu dizi Table nin sütün adları
//ikinci dizi 2 boyutlu olacak bu dizi Table nin satırlarını alıcaktır.
String []ilkdizi=new String[3];
ilkdizi[0]=“No”;
ilkdizi[1]=“İsim”;
ilkdizi[2]=“Soyisim”;
String [][]ikincidizi=new String[4][3];
ikincidizi[0][0]=“10”;
ikincidizi[0][1]=“Rıdvan”;
ikincidizi[0][2]=“Çakır”;
ikincidizi[1][0]=“20”;
ikincidizi[1][1]=“Aykut”;
ikincidizi[1][2]=“Yılmaz”;
ikincidizi[2][0]=“55”;
ikincidizi[2][1]=“Ethem”;
ikincidizi[2][2]=“Şanver”;
ikincidizi[3][0]=“30”;
ikincidizi[3][1]=“Ahmet”;
ikincidizi[3][2]=“Akpınar”;
//Dizileri model kısmına aktarıyoruz.
TableModel tablemodel=new DefaultTableModel(ikincidizi,ilkdizi);
//Modelide Table aktarıyoruz.
table.setModel(tablemodel);
//—–
}
}
PENCEREYE PANEL EKLEME: JPANEL
Paneller pencere üzerinde kendine ait, bağımsız konteynera sahip , ayrılmış alanlardır.Varsayılan görünümde pencere içinde panelleri ayırt edemezsiniz.Fakat istenilirse ayrı bir arkaplan rengi kullanılabilir veya bir border ile çevrelenebilir. Genellikle bir pencerede farklı amaçlarla kullanılacak alanları birbirinden ayırmak ve herbirine farklı layout düzenleri kullanılmak istenildiğinde kullanılır.
Java’da panel oluşturmak için JPanel sınıfı kullanılır.
Örnek : JPanel1
import java.awt.Color;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
public class LayoutDemo extends JFrame
{
public LayoutDemo()
{
this.setTitle(“LayoutDemo Test”);
this.setSize(1280 , 960);
this.setLayout(null);
BilesenleriEkle(this.getContentPane());
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void BilesenleriEkle(Container pencere)
{
JPanel solPanel = new JPanel();
JPanel sagPanel = new JPanel();
JPanel ustPanel = new JPanel();
JPanel altPanel = new JPanel();
JPanel ortaPanel = new JPanel();
pencere.add(solPanel);
solPanel.setBackground(Color.BLUE);
solPanel.setBounds(20, 20, 180, 820);
pencere.add(ustPanel);
ustPanel.setBackground(Color.RED);
ustPanel.setBounds(210, 20, 800, 150);
pencere.add(sagPanel);
sagPanel.setBackground(Color.GREEN);
sagPanel.setBounds(1020, 20, 180, 820);
pencere.add(ortaPanel);
ortaPanel.setBackground(Color.YELLOW);
ortaPanel.setBorder(new TitledBorder(“Orta Panel”));
ortaPanel.setLayout(null);
ortaPanel.setBounds(210, 180, 800, 500);
pencere.add(altPanel);
altPanel.setBackground(Color.CYAN);
altPanel.setBounds(210, 690, 800, 150);
JButton buton1 = new JButton(“Buton1”);
ortaPanel.add(buton1);
buton1.setBounds(20 ,30 ,150 ,40);
}
public static void main(String[] args)
{
new LayoutDemo();
}
}
Verdiğimiz örnekte pencere üzerine 5 adet panel ekledik.Bu panelleri pencereyi alt-üst-sağ-sol ve orta şeklinde alanlara ayırmak için kullandık. setBackground() metodu panelin arkaplan rengini ayarlamada kullanılır. Son olarak eklediğimiz bir buton var ve orta panele bir border eklediğimize dikkat edin.
Dikkatinizi çekmek istediğim bir diğer nokta eklenen buton için verdiğimiz koordinat değerleri.Bu koordinatlar pencerenin başlangıç noktasına göre değil eklemenin yapıldığı ekran bileşeninin başlangıç noktasına göre verilir.
HAZIR GİRİŞ-ÇIKIŞ KUTULARI : JOptionPane
Program yazarken çoğu yerde basit girdi işlemlerinde , bir mesaj görüntülemek istediğimizde veya bir uyarı vermek istediğimizde bir mesaj kutusuna ihtiyaç duyarız.Bu işi sıfırdan bir form tasarlayarak kendimiz de yapabiliriz.Fakat java’da JOptionPane sınıfı bütün bu basit işlemler için gerekli işlevlere sahip nesneleri içerir.
Örneğin bir sudoku uygulaması hazırladığınızı farzedin.Sudoku tablosundaki kutulardan birine tıklayarak sayı girişi yapmak istiyorsunuz.Sudoku bulmacası kurallarına göre bu sayı 1-9 arasında bulunmalı ve satır/sütun ve 9’lu kümede aynı sayıdan bulunmamalı.Bu kontrolü yaptıktan sonra giriş kural ihlali içeriyorsa ekrana “Sayı 1-9 arasında bulunmalıdır!” gibi bir uyarı vermesi gerekir.
Örnek Kod:
String sayi = JOptionPane.showInputDialog(“Sayı giriniz : “);
if(/* Giriş hatalı ise */)
JOptionPane.showMessageDialog(null, “Hatalı giriş ! Sayı 1-9 arasında olmalıdır.”, “Hatalı giriş”, JOptionPane.ERROR_MESSAGE);
Örnekte ilk metod JOptionPane sınıfının showInputDialog() metodudur.Klavyeden bir String okumak için kullanılır.String tipinde bir argüman alır.Bu argüman ekranda görüntülenecek mesajdır.Ekran görüntüsü:
Örnekte ilk metod JOptionPane sınıfının showInputDialog() metodudur.Klavyeden bir String okumak için kullanılır.String tipinde bir argüman alır.Bu argüman ekranda görüntülenecek mesajdır.Ekran görüntüsü:
İkinci metod showMessageDialog() metodu. Bu metod ekrana bir mesaj yada bir uyarı görüntülemede kullanılır. Her iki metodunda farklı parametrelere sahip birden çok overload edilmiş çeşidi vardır.Örneğin showMessageDialog() metodunun 1. parametresi Component tipindedir ve parentComponent olarak geçer.Yani mesaj kutusunun ait olduğu formu işaret eder.Bu parametreye göre mesaj kutusu konumlandırılır ve ait olduğu formu etkiler.Eğer null olarak verilmiş ise çağırıldığı form üzerinden işlenir.
2. parametre mesaj metnidir.
3. parametre kutu başlığıdır.
4. parametre ise mesaj tipidir.Bu parametreye göre mesaj kutusuna ilgili ikon eklenir.
4.parametre için :
Örnek:JOptionPane1
package joptionpane;
import javax.swing.JOptionPane; // JOptionPane kullanabilmek için
public class JOptionPaneKullanimi {
/* Arkadaşlar her seferinde uzun uzun public static void main() yazmaktansa
psvm yazıp tab tuşuna basmanı yeterlidir. yine sys.out.pr() yerine
sout yazıp tab tuşuna basabilirsiniz.*/
public static void main(String[] args) {
/* Kullanıcıdan alacağımız değişkenleri oluşturuyoruz. */
int vizeNotu = 0;
finalNotu = 0;
int /* Kullanıcıdan vize notunu InputDialog penceresi ile alıyoruz */
vizeNotu = Integer.parseInt(JOptionPane.showInputDialog(“Vize notunuzu giriniz.”));
while (vizeNotu<0||vizeNotu>100) {
vizeNotu = Integer.parseInt(JOptionPane.showInputDialog
(“Vize notunuzu giriniz.\nGirilen not 0 ile 100 arasında olmalıdır.”));
}
/* Kullanıcıdan final notunu InputDialog penceresi ile alıyoruz */
finalNotu = Integer.parseInt(JOptionPane.showInputDialog(null,”Final notunuzu giriniz.”,”Final Sonucu”, JOptionPane.INFORMATION_MESSAGE));
while (finalNotu<0||finalNotu>100) {
finalNotu = Integer.parseInt(JOptionPane.showInputDialog
(“Final notunuzu giriniz.\nGirilen not 0 ile 100 arasında olmalıdır.”));
}
/* Sonucu hesaplayı sonuca göre mesaj verilmesi için if-else yapısını kullanıyoruz */
double sonuc = ((vizeNotu*0.4)+(finalNotu*0.6));
String msj;
if (sonuc>55) {
msj = “Dersi geçtiniz. Sonuç: ” + sonuc;
}
else{
msj = “Dersten kaldınız. Sonuç: ” + sonuc;
}
/* En son olarakta MessageDialog penceresi ile kullanıcıya sonucu veriyoruz. */
JOptionPane.showMessageDialog(null, msj, “Sonuç” , JOptionPane.WARNING_MESSAGE);
}
}
OLAY GÜDÜMLÜ PROGRAMLAMA : EVENTS
Bu bölümde Java’da önemli bir yeri olan Olaylar ve Olayların yönetimine ilişkin durumları açıklamaya çalışacağız. Olaylar görsel tabanlı uygulamaların temelini oluştururlar. Olaylar hakkında bilgi sahibi olmadan görsel uygulama yazmak oldukça zor olacaktır.
Uygulama çalışırken kullanıcı tarafından uygulamaya yapılan her bir etki olaydır. Bu bazen fare tıklaması olabileceği gibi bazende farenin hareket etmesidir. Javadaki tüm olaylar aşağıdaki dört unsurdan oluşur.
Olay Kaynağı(Event Source): Olayı tetikleyen nesnedir. Çoğu zaman dış bir birimin durumunun değişmesi olayı tetikler. Fare ve Klavye gibi nesneler en çok olay üretir.
Olay Nesnesi(Event Object): Olayı tetikleyen kod parçasıdır. Olay ile ilgili bilgileri tutar.
Olay Dinleyicileri(Event Listener): Dinleyici bir olayın tetikleme durumu için oluşturulmuş nesnedir. Event Handling Nesnesini tetikler.
Olay İşleyicileri(Event Handling): Olay dinleyicisi tarafından ilgil olay yakalandığında bu olaya ait Event Handling nesnesi tetiklenir ve bu nesne altındaki kod parçalarının çalışmasını sağlar.
OLAY SINIFLARI
Bu bölümde en çok kullanılan olay sınıflarını işleyeceğiz, burada işlediklerimizden daha fazla olay sınıfı bulunmaktadır. Olay sınıfına geçmeden önce bir bişleşene nasıl olay sınıfı eklenir görelim:
Jbutton dugme = new Jbutton(“Yeni Düğme”);
Bileşen Yukarıdaki gibi oluşturulur
dugme.addActionListener(this);
sonrasında dinleyicimiz olayın gerçekleşip gerçekleşmeyeceğini belirlemek üzere düğmeye atanır
Daha sonra ise yine sınıfımızın içinde olayın gerçekleştiğinde çağrılacak ilgili metodumuzu yazıyoruz
void actionPerformed(ActionEvent ae){
//butona tıklandığında çağrılacak metod
}
Şimdi olay sınıflarının bize sağladığı metodlara geçelim
ACTION EVENT
Tanımlı bir bileşenin etki oluşturduğunu bildiren olaydır . Butona basıldığındaki durumlarda oluşurlar . Bu olay sınıfının metodlaır aşağıdaki gibidir.
– ActionEvent(Object kaynak, int id, String komut)
– ActionEvent(Object kaynak, int id, String komut, int belirtec)
– ActionEvent(Object kaynak, int id, String komut, long zaman, int belirtec)
Burada kaynak olayı başlatan nesnedir. ID olay tipini integer ile ifade eder, komut ise olayla ,ilişkilendirilen komut dizisibelirteç ise olay gerçekleştiğinde hangi belirteç tuşlarına basıldığını ifade eder negatif hiçbir anlam ifade etmezken 0 hiçbir tuşa basılmadığı anlamına gelir.
ADJUSMENT EVENT
Genellikle kaydırma çubuğu tarafından oluşturlan olaylardır.
Adjusment_value_changed : Kaydırma çubuğunun durumunun değiştiğini gösterir
BLOCK_DECREMENT: Kaydırma çubuğunun değerinin düştüğünü gösterir
BLOCK INCREMENT: değerinin arttığı
TRACK : sürüklendiğini gösterir
COMPONENT EVENT
Bileşenlerin durumları ile ilgilidir. Bir bileşenin konumu veya boyutu değiştiğinde olay tetiklenir.
ComponentEvent(Component kaynak, int tip)
Kaynak olayı başlatan nesne tip ise olayın tipini belirtir
CONTAINER EVENT
Bir bileşen container nesnesine eklendiğinde oluşur
ContainerEvent(Compnent Kaynak, int id, Componen diger)
kaynak olayı başlatan bileşen, id olay tipi ve diger container nesnesine eklenilen ve çıkarılan bileşendir.
FOCUS EVENT
Bu olay bileşen üzerinde herhangi bir odak alındığında veya kaybedildiğinde tetiklenir
Focus_gained ve Focus_lost değerleriyle olayı anlar.
INPUT EVENT
Genelde seçim ile ilgilidir bir liste öğesi seçildiğinde onay kutusu seçildiğinde veya kaldırıldığında bu olay
Üretilir.
KEY EVENT ve MOUSE EVENT
Klavye ve Mouse olayları ile ilgilenir
VK_ENTER: ENTER TUŞU
MOUSE_CLICKED: Fare tıklandı (butona basıldı ve serbest bırakıldı)
MOUSE_DRAGGED: Fare sürüklendi
MOUSE_MOVED : fare hareket etti
MOUSE WHEELEVENT
Bu olay sınıfı farenin tekerleğini kontrol eder. Mouse event sınıfının alt sınıfıdır.
WHEEL_BLOCK_SCROLL: Bir sayfa yukarı ve aşağı hareket ettirmede
WHEEL_UNIT_SCROOL: Bir satır yukarı ve aşağı hareket ettirmede
TEXT EVENT
Metin nesnelerinin içeriğinin değiştiğindeki olaydır.
TEXT_VALUE_CHANGED: metin nesnesi değiştiğini belirten durumdur
WINDOW EVENT
Pencere olaylarını kontrol eder.
WINDOW_CLOSED: pencere kapandığında
WINDOW_OPENED: pencere açıldığında
OLAY DİNLEYİCİLER (EVENT LISTENERS)
Olay dinleyicileri kaynağından aldığı etkilişimleri uygun olay metoduna aktarır
ActionListener= Herhangi bir olay geçrekleşme durumunu kontrol eder
AdjusmentListener= Ayarlama olaylarını kontrol eder
ComponentListener=Bileşenin üzerine yapılan etki olaylarını kontrol eder
Container Listener=Bileşen eklendiğini veya çıkarıldığı kontrol eder
FocusListener= Olayı çağıran nesne odak kazandığında veya kaybettiğinde çalışır
ItemListener=Bir öğenin durumunun değişip değişmediğini kontrol eder
KeyListener=Klavye tuşuna basılıp basılmadığını kontrol eder
MouseListener=Farenin tuşlarına basılma olaylarını kontrol eder
MouseMotionListener=Farenin hareketlerini kontrol eder
MouseWhellListener=Fare tekerleğinin hareket ettirilmesini kontrol eder
OLAY DİNLEYİCİLER (EVENT LISTENERS)
Olay dinleyicileri kaynağından aldığı etkilişimleri uygun olay metoduna aktarır
ActionListener= Herhangi bir olay geçrekleşme durumunu kontrol eder
AdjusmentListener= Ayarlama olaylarını kontrol eder
ComponentListener=Bileşenin üzerine yapılan etki olaylarını kontrol eder
Container Listener=Bileşen eklendiğini veya çıkarıldığı kontrol eder
FocusListener= Olayı çağıran nesne odak kazandığında veya kaybettiğinde çalışır
ItemListener=Bir öğenin durumunun değişip değişmediğini kontrol eder
KeyListener=Klavye tuşuna basılıp basılmadığını kontrol eder
MouseListener=Farenin tuşlarına basılma olaylarını kontrol eder
MouseMotionListener=Farenin hareketlerini kontrol eder
MouseWhellListener=Fare tekerleğinin hareket ettirilmesini kontrol eder
Ornek: Eventsorn1 Klavye Olayları
package com.klavyeOlaylari;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class klavyeOlaylari extends
JFrame implements KeyListener{
JLabel lb=new JLabel(“Bir Tusa Bas”);
//Yapicinin icin de label,formun boyutlarini
//belirleyip ve lable leri forma ekledik
public klavyeOlaylari(){
this.setBounds(10, 20, 600, 500);
lb.setBounds(10, 20, 260, 60);
this.getContentPane().setLayout(null);
this.getContentPane().add(lb);
//klavyeyin olayini dinlemesi icin formu tetikliyoruz
//mutlaka tanimlanmalidir.
this.addKeyListener(this);
}
public static void main(String[] args) {
klavyeOlaylari obj=new klavyeOlaylari();
obj.show();
}
String girilenler=””;
//klavyeden ilk tusa basildiginda calisan olaydir
//ve tusa basili kaldigi surece calismaya devam eder.
public void keyPressed(KeyEvent e) {
girilenler=girilenler+(char)e.getKeyCode();
lb.setText(girilenler);
}
//keyPressed olayindan sonra calisir.keyPressed ve
//keyTyped tusa basili oldugu surece calisir.keyReleased
//elimizi tustan cektigimiz anda calisan olaydir
public void keyReleased(KeyEvent e) {
}
//Son olarak bu olay calisir.
public void keyTyped(KeyEvent e) {
}
}
KAYNAKÇA
https://forum.donanimhaber.com/m_67381344/tm.htm
http://www.oguvenir.com/2013/04/jlabel-kullanm-jlabel-swingsnfnn-bir.html
http://www.codejava.net/java-se/swing/jradiobutton-basic-tutorial-and-examples
Java Yeni Başlayanlar İçin Kodlab Mehmet Kirazlı – Sezer Tanrıverdioğlu
http://www.ethemsulan.com/2009/12/keylistenerklavye-olay-alglaycs-java.html
http://javayaz.com/?page_id=107
http://vusalisayev.blogcu.com/java-jframe-jlabel-ornek/10976169
http://www.yazilimmutfagi.com/10211/windows/java/java-arayuz-gui-uygulamasi-ve-actionlistener-sinifi.aspx
volkanavsar@volkanavsar.com
www.volkanavsar.com