Articles

Swing ile GUI Programlama (Turkish: “GUI Programming with Swing”)

taken from http://e-bergi.com/2008/Eylul/Swing-ile-Arayuz-Tasarimi

Yazıyı PDF formatında indirmek için tıklayın

Herkese merhaba.

Bu ay, Java’da Swing kullanarak grafik arayüzü oluşturmayı öğreneceğiz. Kısaca özetlemek gerekirse; günümüz bilgisayar programlarını iki kısımda incelemek mümkündür. Birincisi, bir hesaplama yapmak, veritabanı sorgulamak, dosya gönderip almak gibi işlemlerin yapıldığı koddur. İkincisi ise, kullanıcı ile program arasında köprü görevi yapan, kullanıcının programa veri girmesini ve programın ürettiği verileri kullanıcıya iletmesini sağlayan, yani programla kullanıcı arasında iletişimi sağlayan arayüz kısmıdır. Swing, günümüz uygulamalarınca kullanılan kullanıcı arabirimini (GUI – Graphical User Interface) tanımlayan sınıflar ve arabirimler koleksiyonudur. Aynı amaçla kullanılan Abstract Window Toolkit (AWT)’nin yetersizliklerini gidermek için 1997 yılında kullanılmaya başlanmıştır. Swing ilk defa Java 1.1 için ayrı bir kütüphane halinde sunulmuştur, daha sonra Java 1.2 ile birlikte Java’nın bir parçası haline gelmiştir.

İlk Swing Uygulamamız

Bu kısa bilgiden sonra ilk Swing uygulamamızı yazmaya başlayabiliriz. İlk Swing programımızdaki amaç, ekranda içi boş bir pencere oluşturmak. Aşağıdaki kodu inceleyelim.

import javax.swing.*;

public class HelloWorld {

public HelloWorld(){
JFrame jfr = new JFrame("Merhaba, Dunya!");
jfr.setSize(300,150);
jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jfr.setVisible(true);
}

public static void main(String[] args){
HelloWorld hw = new HelloWorld();
}
}

Bu kodu HelloWorld.java adlı bir dosyaya kaydedelim. javac HelloWorld.java komutuyla derledikten sonra, java HelloWorld komutuyla programı çalıştıralım. Programın çıktısı şekildeki gibidir.

Bu noktada ufak bir hatırlatma yapmakta fayda var. Java’da dosya ismi ile dosyada tanımlanan sınıf ismi aynı olmalıdır. Sınıfımızın ismini HelloWorld olarak seçtiğimiz için dosyamızın ismi HelloWorld.java olarak belirliyoruz.

Şimdi, kodumuzu yakından inceleyelim.

import javax.swing.*;

Bu satırla, programımıza, JFrame’in tanımlı olduğu kütüphaneyi eklemiş oluyoruz. JFrame, ekranda görünen pencereyi temsil eden bir sınıftır. JFrame nesnesi üzerinde yapacağınız değişiklikler, doğrudan pencereye yansır.

JFrame jfr = new JFrame("Merhaba, Dunya!");

Bu satırla JFrame nesnemizi, yani penceremizi oluşturuyoruz ve başlığını “Merhaba Dunya!” olacak şekilde ayarlıyoruz. Bunu yapmanın bir diğer yolu JFrame’in setTitle metodunu kullanmaktır. Fakat kullandığımız yapıcı fonksiyon (constructor) bu işi bizim yerimize yapıyor.

jfr.setSize(300,150);

Penceremizin boyutlarını, genişliği 300, yüksekliği 150 piksel olacak şekilde ayarlıyoruz.

jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Pencerenin köşesindeki kapatma tuşuna tıkladığımızda programımızın sonlanması için JFrame’in setDefaultCloseOperation metodunu, yine JFrame’de tanımlı EXIT_ON_CLOSE sabitiyle çağırıyoruz.

jfr.setVisible(true);

Son olarak, penceremizin ekranda görünmesi için, JFrame’imizin setVisible metodunu kullanıyoruz.

İşte ilk Swing programımızı yazdık bile! Pek kapsamlı bir program olmasa ve göze pek hitap etmese de, bu henüz başlangıç. Daha zengin Swing uygulamaları hazırlamamız için, Swing kütüphanesinde tanımlı çok sayıda bileşen (component) vardır. JLabel, JButton, JTextField, JTextArea, JRadioButton, JCheckBox, JSlider bunlardan sadece birkaçıdır. İkinci örneğimizde JLabel, JButton ve JTextField bileşenlerini inceleyeceğiz.

Bir JLabel nesnesi, ekranda yazı, resim veya hem yazı hem resim görüntülemek için kullanılır. JButton, Swing uygulamalarında sıkça kullanılan bir bileşendir. Üzerine tıklanabilecek bir düğme yaratmak için kullanılır. JTextField ise, kullanıcının tek satırlık bilgi girmesini sağlayan ya da tek satırlık bir bilgiyi ekranda görüntülemek için kullanılan bir bileşendir. İkinci programımız, kullacıdan, ismini girmesini isteyecek. Kullanıcı, ismini ayrılan alana girip “Tamam” düğmesine tıkladığında, ekranda onu karşılayan bir mesaj belirecek. Merhaba.java dosyamızın kaynak kodunu verelim.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Merhaba {

JTextField text;
JButton button;
JLabel label;

public Merhaba(){

JFrame jfr = new JFrame("Merhaba");
jfr.getContentPane().setLayout(new FlowLayout());
jfr.setSize(400,150);
jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

text = new JTextField(10);
jfr.getContentPane().add(text);

button = new JButton("Tamam");

jfr.getContentPane().add(button);

label = new JLabel("Lutfen isminizi girin.");
jfr.getContentPane().add(label);

button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
label.setText("Merhaba " + text.getText());
}
});

jfr.setVisible(true);
}

public static void main(String[] args){
Merhaba m = new Merhaba();
}

}

Programın çıktısı ve kullanıcı ismini girip Tamam butonuna tıkladıktan sonraki hali şekildeki gibidir.

İlk olarak, ContentPane ve Layout kavramlarını açıklayalım. Swing uygulamalarında JLabel, JButton, JTextField gibi bileşenler (component), bir container üzerine yerleştirilirler. Container’lar, çok sayıda bileşeni ve başka container’ları üzerinde barındıran nesnelerdir. Yani bir JButton ya da diğer bir bileşen JFrame’e değil, bir container nesnesine eklenir. Her JFrame için önceden tanımlı bir container vardır. Bu container’ı elde etmek için JFrame’deki getContentPane() metodunu kullanırız. Bu metod, bileşenlerin üzerine eklenebileceği, JFrame’e ait container’a (ContentPane) bir referans döndürür. Layout’lar ise, container’a eklenen bileşenlerin ekranda nasıl yerleştirileceğini belirler. Bu yazımızda Layout’ların ayrıntısına girmeyeceğiz. FlowLayout, en çok kullanılan Layout’lardan biridir. Container’a eklenen bileşenlerin, eklendiği sırada, soldan sağa, satır sonuna gelindiğinde ise yukarıdan aşağı doğru görüntülenmesini sağlar. GridBagLayout, GridLayout, BorderLayout sıkça kullanılan diğer Layout’lardır. Şimdi kodumuzu yakından inceleyelim.

jfr.getContentPane().setLayout(new FlowLayout());

Bu satırda penceremizin (JFrame) ContentPane’inin layout’unu FlowLayout olacak şekilde seçiyoruz. Bundan sonra ContentPane’e eklenecek bileşenler, ekranda FlowLayout yerleşiminin gerektirdiği şekilde görünecektir.

text = new JTextField(10);
jfr.getContentPane().add(text);

Bu iki satırda, kullanıcının ismini girmesine imkan tanıyan, 10 sütun genişliğinde bir JTextField bileşeni tanımlıyoruz ve penceremizin ContentPane’ine ekliyoruz.

button = new JButton("Tamam");

Düğmemizi, üzerinde “Tamam” yazısı görünecek şekilde oluşturuyoruz. JButton’lar üzerinde yalnızca yazı kullanmak zorunda değiliz. Onun yerine bir resim, hatta hem yazı hem resim de kullanabiliriz.

label = new JLabel("Lutfen isminizi girin.");
jfr.getContentPane().add(label);

Bu satırlarda, başlangıçta “Lutfen isminizi girin.” yazısını gösteren bir JLabel oluşturuyoruz ve pencerenin ContentPane’ine ekliyoruz.

button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
label.setText("Merhaba " + text.getText());
}
});

Programımızın en can alıcı ve anlaması diğerlerine göre biraz daha zor olabilecek satırları bunlar. Bu satırlarda, ekranda görünen düğmeye (JButton) tıkladığımız zaman ne olması gerektiğini yazıyoruz. JButton’ın addActionListener metodunu, bir ActionListener ile çağırıyoruz. ActionListener, içinde actionPerformed metodunu barındıran bir arabirim (interface)dir. ActionPerformed metodu yukarıdaki gibi tanımlanmış bir ActionListener nesnesini JButton’a göndererek, düğmenin tıklanması durumunda yapılacak şeyi belirlemiş oluyoruz. JLabel’ın setText metodu, JLabel’da görünen yazıyı değiştirmeye yararken, getText metodu bu yazıyı String olarak döndürür.

Sonuç

Bu ay, Java’daki Swing kütüphanesini kullanarak göze hitap eden grafik kullanıcı arayüzlerini nasıl yapabileceğimizi öğrendik. Swing kütüphanesi, elbette ki bu gördüklerimizden ibaret değildir, içinde çok farklı amaçlara hizmet eden ve hayatımızı kolaylaştıran sayısız eleman barındırır. Önümüzdeki ay, Swing’in diğer özelliklerini tanıyıp, daha güzel ve daha işlevsel uygulamalar geliştirmeyi öğreneceğiz. Önümüzdeki ay görüşmek üzere. Hoşçakalın 🙂


Swing ile GUI Programlama II (Turkish: “GUI Programming with Swing II”)

taken from http://e-bergi.com/2008/Ekim/Swing-ile-GUI-Programlama-II

Yazıyı PDF formatında indirmek için tıklayın

Merhaba sevgili e-bergi okuyucuları;

Bu ay, geçen ay giriş yaptığımız Swing’i incelemeye devam edeceğiz ve Swing’in daha gelişmiş özelliklerini tanıyacağız. Hepinizin hoşuna gideceğini umuyorum.

Bu ayki ilk örneğimizde JRadioButton’ları, JCheckBox’ları ve JTextArea’ları tanıyacağız. JRadioButton ve JCheckBox, kullanıcının, birden çok seçenek arasından seçim yapmasını sağlayan bileşenlerdir. JRadioButton ve JCheckBox’ın farkı, JCheckBox ile seçeneklerden istenilen kadarı seçilebiliyorken, JRadioButton ile yalnızca bir adet seçim yapılabilmesidir. JTextArea ise kullanım açısından JTextField’a benzer. Fakat JTextField ile tek satırlık veri girilip görüntülenebilirken, JTextArea ile birden çok satır girilebilir ve görüntülenebilir.

Üçüncü programımızın ismi Hayvanlar.java. Bu programda kullanıcı, JRadioButton’ları kullanarak “Kedi”, “Kopek” ve “Fare”den birini seçiyor. Hemen altta, yaptığı seçime karşılık gelen resmi görebiliyor. Daha sonra JCheckBox’ları kullanarak bunlardan hangisini veya hangilerini sevdiğini işaretliyor ve “Tamam” düğmesine tıklayarak sevdiği hayvanların listesini görebiliyor. Resimleri görüntülemek için JLabel kullanacağız. Resimlerin görüntülenebilmesi için aşağıdaki resimleri sırasıyla kedi.jpeg, kopek.jpeg ve fare.jpeg isimleriyle, programınızla aynı dizine kaydetmelisiniz.


Programın kaynak kodunu verelim.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Hayvanlar {

JRadioButton jrbKedi, jrbKopek, jrbFare;
ButtonGroup bg;
JCheckBox jcbKedi, jcbKopek, jcbFare;
JLabel resim, bilgi;
JButton tamam;
JTextArea text;

public Hayvanlar(){

JFrame jfr = new JFrame("Hayvanlar");
jfr.getContentPane().setLayout(new FlowLayout());
jfr.setSize(220,400);
jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

jrbKedi = new JRadioButton("Kedi");
jrbKedi.setSelected(true);
jrbKedi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
resim.setIcon(new ImageIcon("kedi.jpeg"));
}
});

jrbKopek = new JRadioButton("Kopek");
jrbKopek.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
resim.setIcon(new ImageIcon("kopek.jpeg"));
}
});

jrbFare = new JRadioButton("Fare");
jrbFare.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
resim.setIcon(new ImageIcon("fare.jpeg"));
}
});

bg = new ButtonGroup();
bg.add(jrbKedi);
bg.add(jrbKopek);
bg.add(jrbFare);

jfr.getContentPane().add(jrbKedi);
jfr.getContentPane().add(jrbKopek);
jfr.getContentPane().add(jrbFare);

resim = new JLabel(new ImageIcon("kedi.jpeg"));
jfr.getContentPane().add(resim);

text = new JTextArea("Sevdiginiz hayvanlar:\n",5,15);
text.setEditable(false);
jfr.getContentPane().add(text);

bilgi = new JLabel("Sevdiginiz hayvanlari secin.");
jfr.getContentPane().add(bilgi);

jcbKedi = new JCheckBox("Kedi");
jcbKopek = new JCheckBox("Kopek");
jcbFare = new JCheckBox("Fare");

jfr.getContentPane().add(jcbKedi);
jfr.getContentPane().add(jcbKopek);
jfr.getContentPane().add(jcbFare);

tamam = new JButton("Tamam");
tamam.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
text.setText("Sevdiginiz hayvanlar:\n");

if (jcbKedi.isSelected())
text.append("Kedi\n");

if (jcbKopek.isSelected())
text.append("Kopek\n");

if (jcbFare.isSelected())
text.append("Fare\n");
}
});
jfr.getContentPane().add(tamam);

jfr.setVisible(true);
}

public static void main(String[] args){
Hayvanlar h = new Hayvanlar();
}

}

Kodumuzdaki önemli yerleri inceleyelim.

ButtonGroup bg;

Aynı anda yalnızca bir tane JRadioButton’ın seçilebileceğini söylemiştik. Bu sebeple, arasından seçim yapılacak JRadioButton’ların bir grup altında toplanması gerekir. ButtonGroup nesnesini bu amaçla kullanıyoruz.

jrbKedi = new JRadioButton("Kedi");

JRadioButton’larımızı oluştururken, hemen yanında görüntülenecek yazıyı da belirleyebiliyoruz.

jrbKedi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
resim.setIcon(new ImageIcon("kedi.jpeg"));
}
}

Geçen ayki örneğimizde JButton’a tıkladığımız zaman ne yapılması gerektiğini belirtmiştik. Şimdi de, benzer şekilde, JRadioButton’ın seçildiği zaman ne olması gerektiğini kodluyoruz. Burada yeni olan tek şey setIcon metodu. JLabel’ların yazının yanısıra resim göstermek için de kullanılabileceğini söylemiştik. Bunu sağlamak için JLabel’ın setIcon metodunu bir ImageIcon nesnesiyle çağırmamız gerekiyor. ImageIcon nesnesini, dosya ismini kullanarak oluşturuyoruz ve setIcon metoduna gönderiyoruz.

bg = new ButtonGroup();
bg.add(jrbKedi);
bg.add(jrbKopek);
bg.add(jrbFare);

ButtonGroup nesnesini oluşturuyoruz ve sırayla, JRadioButton’larımızı, ButtonGroup’un add metodunu kullanarak gruba ekliyoruz.

text = new JTextArea("Sevdiginiz hayvanlar:\n",5,15);
text.setEditable(false);

JTextArea nesnesini oluşturuyoruz. Yapıcı fonksiyona (constructor) gönderdiğimiz ilk argüman, içerisinde görüntülenecek yazıyı, ikinci argüman satır sayısını, üçüncü argüman ise sütun sayısını gösteriyor. setEditable(false) yaparak JTextArea’nın kullanıcı tarafından değiştirilmesini engelliyoruz. Yani bu alana klavyeden giriş yapılmayacak. Bu durum, JTextArea’nın içeriğinin program çalıştığı sürece sabit kalacağı anlamına gelmez. Programın akışı içerisinde burası değişebilir.

jcbKedi = new JCheckBox("Kedi");

JCheckBox’larımızı oluşturuyoruz ve yazılarını belirliyoruz. JCheckBox’ların herhangi bir grup altında toplanmasına gerek yoktur, çünkü bunlar birbirinden bağımsız çalışırlar.

if (jcbKedi.isSelected())
text.append("Kedi\n");

JCheckBox’ın isSelected metodu, CheckBox seçili ise true, değilse false döner. JTextArea’daki append metodu ise, isminden anlaşılacağı gibi, JTextArea’nın içindeki yazıya ekleme yapmak için kullanılır.

Swing’de tanımlı daha birçok bileşen vardır. Sıradaki örneğimizde JSlider ve JProgressBar’ı tanıyacağız.

Çoğu zaman, yapmak istediğimiz şeyin anında gerçekleşmediği, sonucu görebilmemiz için beklemek zorunda kaldığımız durumlarla karşılaşırız. Bu gibi durumlarda kullanıcıya, sürecin ne kadarının tamamlandığını bildirmek iyi bir fikirdir. Hatta sürecin ne kadarının tamamlandığı bilinmese bile, kullanıcıyı, çalışmanın devam ettiği yönünde bilgilendirmek isteyebiliriz. Swing kütüphanesinde tanımlı JProgressBar bu amaçla kullanılır. JProgressBar, isminden de anlaşılacağı gibi, bir işin ne kadarının tamamlandığını gösteren bir çubuktur. JSlider ise, belli bir aralık içerisinde bulunan bir değeri değiştirmek için sürükleyip bırakabileceğimiz bir düğmedir. Değişik amaçlarla kullanılabilir, örneğin; çalan müziğin sesini ayarlamak ya da radyo frekansını değiştirmek gibi.

Örneğimizde 3 adet JSlider’ı penceremizin arkaplan rengini ayarlamak için kullanacağız. Birincisi rengin kırmızı (R), ikincisi yeşil (G), üçüncüsü de mavi (B) bileşenini kontrol edecek. 2 adet JProgressBar’larımızdan birisini, “Başla” düğmesine tıklanınca başlayan ve eşit zaman aralıklarında eşit miktarda ilerleyen hayali bir işi göstermek için kullanacağız. Tabi gerçek bir iş sabit hızda ilerlemeyebilir, fakat bu örnek için öyle olduğunu varsayalım. JProgressBar’lar, sürecin ne kadarının tamamlandığı belli olmadığı zamanlarda belirsiz (indeterminate) modda çalıştırılmalıdır. Diğer JProgressBar’ımızı bunu göstermek için kullanacağız. Şimdi programımızın kaynak kodunu verelim. Sınıfımızın ismi “Renk”, dosyamızın ismi “Renk.java” olacak.


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Renk extends JFrame {

private JProgressBar cubuk1, cubuk2;
private JButton basla;
private JSlider sliderR, sliderG, sliderB;
private JLabel lblR, lblG, lblB;
private Timer timer;
private int yuzde = 0;

public Renk(){
setTitle("Renkler");
setSize(230,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new FlowLayout());

timer = new Timer(500, new ActionListener(){
public void actionPerformed(ActionEvent e){
if (yuzde == 100)
timer.stop();
else
{    yuzde += 5;
cubuk2.setValue(yuzde);
}
}
});

lblR = new JLabel("R :");
getContentPane().add(lblR);

sliderR = new JSlider(0,100);
sliderR.setMajorTickSpacing(20);
sliderR.setMinorTickSpacing(10);
sliderR.setPaintTicks(true);
getContentPane().add(sliderR);
sliderR.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
getContentPane().setBackground(new Color(
sliderR.getValue()/100.0F,
sliderG.getValue()/100.0F,
sliderB.getValue()/100.0F));
}
});

lblG = new JLabel("G :");
getContentPane().add(lblG);

sliderG = new JSlider(0,100);
sliderG.setMajorTickSpacing(20);
sliderG.setMinorTickSpacing(10);
sliderG.setPaintTicks(true);
getContentPane().add(sliderG);
sliderG.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
getContentPane().setBackground(new Color(
sliderR.getValue()/100.0F,
sliderG.getValue()/100.0F,
sliderB.getValue()/100.0F));
}
});

lblB = new JLabel("B :");
getContentPane().add(lblB);

sliderB = new JSlider(0,100);
sliderB.setMajorTickSpacing(20);
sliderB.setMinorTickSpacing(10);
sliderB.setPaintTicks(true);
getContentPane().add(sliderB);

sliderB.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
getContentPane().setBackground(new Color(
sliderR.getValue()/100.0F,
sliderG.getValue()/100.0F,
sliderB.getValue()/100.0F));
}
});

cubuk1 = new JProgressBar(0,100);
cubuk1.setIndeterminate(true);
getContentPane().add(cubuk1);

cubuk2 = new JProgressBar(0,100);
cubuk2.setStringPainted(true);
getContentPane().add(cubuk2);

basla = new JButton("Basla");
getContentPane().add(basla);
basla.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
timer.start();
basla.setEnabled(false);
}
});

getContentPane().setBackground(new Color(0.5F, 0.5F, 0.5F));

setVisible(true);
}

public static void main(String[] args){
new Renk();
}

}

Kodumuzun önemli yerlerine göz atalım.

public class Renk extends JFrame {

Önceki örneklerden farklı olarak, bu örneğimizde sınıfımızı JFrame sınıfından türettik. Bu sayede bir JFrame nesnesi yaratıp onun üzerinden işlem yapmak yerine doğrudan kendi sınıfımız üzerinden işlem yapabiliriz.

private Timer timer;

Eşit zaman aralıklarında ilerleyen bir işi temsil etmek için bir Timer nesnesine ihtiyacımız olacak. Bir Timer nesnesi, belli aralıklarla action event ateşler.

timer = new Timer(500, new ActionListener(){
public void actionPerformed(ActionEvent e){
if (yuzde == 100)
timer.stop();
else
{    yuzde += 5;
cubuk2.setValue(yuzde);
}
}
});

Timer’ın yapıcı fonksiyonuna gönderilen ikinci argüman, ateşleyeceği action event’i belirten ActionListener nesnesini, birinci argüman da bu action event’in kaç milisaniye arayla ateşleneceğini belirtir. Timer, stop() fonksiyonu çağrılarak durdurulabilir.

sliderR = new JSlider(0,100);

JSlider’ın yapıcı fonksiyonuna gönderilen argümanlar, JSlider’ın alabileceği minimum ve maksimum değerleri belirler.

sliderR.setMajorTickSpacing(20);

setMajorTickSpacing fonksiyonu ile JSlider’daki büyük çentiklerin kaç birim arayla çizileceğini belirtiyoruz.

sliderR.setMinorTickSpacing(10);

setMinorTickSpacing fonksiyonu da JSlider’daki küçük çentiklerin kaç birim arayla çizileceğini belirtmemizi sağlıyor.

sliderR.setPaintTicks(true);

Çentiklerin ekranda görüntülenmesini için setPaintTicks fonksiyonunu kullanıyoruz.

sliderR.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
getContentPane().setBackground(new Color(
sliderR.getValue()/100.0F,
sliderG.getValue()/100.0F,
sliderB.getValue()/100.0F));
}
});

JSlider’ın sürgüsü kaydırıldığında bir change event ateşlenir. Sürgü kaydırıldığında yapılmasını istediğimiz şeyi bu sayede belirtebiliriz. JSlider’ın şu anki değeri getValue fonksiyonuyla elde edilebilir. Pencerenin arkaplan rengini değiştirmek için ContentPane’inin setBackground fonksiyonunu bir Color nesnesiyle çağırıyoruz. Color’ın yapıcı fonksiyonuna gönderdiğimiz değerler sırasıyla oluşturmak istediğimiz rengin kırmızı (R), yeşil (G) ve mavi (B) bileşenlerinin değerleridir. Bu değerler 0.0 ile 1.0 arasında ve float türünde olmalıdır.

cubuk1 = new JProgressBar(0,100);

JProgressBar’ın yapıcı fonksiyonuna gönderilen değerler sırasıyla JProgressBar’ın minimum ve maksimum değerleridir.

cubuk1.setIndeterminate(true);

Bu JProgressBar belirsiz (indeterminate) modda çalışacak. Bunu yapmak için JProgressBar’ın setIndeterminate fonksiyonunu kullanıyoruz.

cubuk2.setStringPainted(true);

JProgressBar’ın setStringPainted fonksiyonunu true ile çağırmak, JProgressBar’ın değerinin yüzde kaçına denk geldiğinin çubuğun üstüne yazılmasını sağlar.

timer.start();

Timer nesnesinin start fonksiyonu, zamanlayıcının başlamasını sağlar.

basla.setEnabled(false);

“Başla” düğmesine bir defa tıklandıktan sonra tekrar tıklanmaması için JButton’ın setEnabled fonksiyonunu false ile çağırıyoruz. Bir JButton’a tıklanabilmesi için JButton’ın etkinleştirilmiş olması gerekir.

Sonuç

Bu ayki yazımızın da sonuna geldik. Gelecek ay, programlarımıza menü çubuğu ekleyerek kullanımını kolaylaştırmayı ve klavyeden veri girişi yapıldığında ortaya çıkan olayları (KeyEvent) yönetmeyi öğreneceğiz. Görüşmek üzere 🙂


Women In Business

Tolga AKIN

Middle East Technical University
Ankara, TURKEY
2007

Every day, more and more women are gaining place in the business industry. Borders
are becoming vague and concepts are becoming wider, forcing the workforce from different
businesses and inevitably different sexes to come together. As workplaces are shared by more people and interactions between employees increase, an unforeseen problem pops up as a result. For some reason, women are not always treated in the same way as men are. Even though there is no concrete reason requiring this situation, there is some kind of hierarchy among workers. There are unwritten “rules” stating that women should not be paid much attention to, or be given high authorizations. For no apparent reason, women applying to sophisticated jobs are rejected even if the person has the qualifications desired. This gives an impression that there is a huge inequality between men and women. However, some people insist rejecting this claim. As a result a question emerges: Why do some people believe that there is no inequality between men and women?

Throughout the world, in almost all societies, there is a prevailing indifference about the
issue of discrimination against women in the business environment. Most people reject even to discuss the problem. To them, some important issues that are debated fiercely do not mean much. For example, they see the separation of professional jobs into “men’s jobs” and “women’s jobs” as a natural consequence of the nature of human, whereas others are utterly fed up with it. The discrimination against women in the workplace and categorizing of jobs into “men’s jobs” and “women’s jobs” probably stems from the earliest stages of human society. In spite of the significant changes in women’s roles which have taken place in the last 50 years, the laws implemented to prevent sex discrimination and the decline of requirement of physical force in most jobs, that tradition of ours is predominantly existent in our modern of the twenty-first century (Bergmann, 2005, p.61).

Secondly, we can state that in the ancient times, women were usually considered
second-class humans. They weren’t allowed to get a job. A man could be married to many
woman the same time. Men treated their wives as if they were servants. They used to cook, clean the house, look after the children and make their husband comfortable. Nowadays, it is difficult to face a situation like this, however, a leopard cannot change its spots. This narrow-minded and conservative mentality still exists in our world and it is not very rare. Of course, these people reject the claim that wages are not distributed fairly. One cannot expect them to recognize this unfairness while they think that a wife should stay at home all day long, doing housework and pleasing her husband. “Indeed, before the women’s liberation movement and other social issues brought this issue of women’s wages to the fore, the prevalent view was that the gender pay gap, although sizeable, was not much source for concern” (Blau, Brinton, & Grusky , 2006, p.38).

When it comes to distribution of jobs between men and women, another inequality
stands out. It is quite improbable to see female police officers, taxi drivers, military officers or firefighters in our daily lives. Those who do not accept that this situation constitutes
discrimination claim that “men are more willingly to take on dangerous jobs so can find better paying jobs that those who are not willing to risk their lives” (Amy, 2005, par. 1).

The issue of light duty is one of the most controversial ones. When an employee has an
accident or gets sick, he/she will likely to be granted light duty. However, when a female
employee is pregnant, things are different. A pregnant woman is not always likely to be
granted light duty. However, to some people, this is not a sex discrimination either. They
argue that “pregnancy is generally not considered a disability under the Americans with
Disabilities Act” (Lynn, 1999, par. 2).

Last but not least, people argue that there is no sex discrimination by pointing out the
fact that there are many female parliamentarians worldwide. 14.8 percent of the world’s
parliamentarians are female and the number is increasing almost everywhere (Douglas, &
McCauley, & Ostrow, & Wimbrow, 2003, par. 1).

By examining the arguments introduced so far, it could be said that although the issue of
sex discrimination against women is debatable, people are not so sensible about it. They
usually tend either to deny or ignore the fact that men and women are not treated equally in the professional business environment. However, when inspected carefully, the existence and severity of the problem is not so difficult to detect. Even in our 21st century modern lives, it is apparent. Just by making some observations or doing a little research, one will find considerable evidence pointing out the undeniable fact that sex discrimination does exist.

According to some people, men and women are totally different, the two sexes were
created differently in the first place, so this situation is a natural reason why women cannot be considered equal to men. They assert that men and women should not be treated equally in the professional business world. This argument is very far-fetched. It is true that there are some differences between men and women but apart from jobs that require hard physical force, this assertion is nothing more than an excuse. In the professional environment of business, there is no job which is appropriate only for men. Every single task can be taken care of by women as well as men.

Another inequality can be observed in terms of salaries. This issue is very easy to see,
because unfortunately, it is a part of our lives and it is very common. Bureau of Labor
Statistics showed that women earned about three-fourths as much as men did in 1999.
Although double standard in salaries due to gender is quite obvious, reasons behind it are still disputed. One reason is that the amount of jobs held by two sexes are different (Boraas & Rodgers, 2003, par. 1). Not only can women find jobs despite having the capability, but also they cannot get the money they deserve. In the early years in which women started to emerge in the business, the situation was worse. “Throughout that period, women earned three-fifths as much as men. The constancy of that differential is startling. Even today, women earn only about 76 cents of every dollar earned by men” (Lindgren, Palumbo, Taub, & Wolfson, 2005, pp. 162-163).

The main reason why the business world is dominated by men is not that women aren’t
capable of handling the job, it is the fact that women who attempt to earn a space in the area constantly face discouragement, suppression and exclusion.

Finally, the assertion that men are more willing to take on dangerous jobs is not
completely untrue. In some cases, where danger is involved, men could act fearlessly.
However, this reason cannot account for the lack of equity between the two sexes. If that was the case, there would be no female police officers, guardians, soldiers or security officers. There are female fighter jet pilots who serve their country in a way that most men cannot even dare to try; there are female police officers who devote themselves to serve and protect the public, and there are female guardians in jails whose job is not easy at all. Hence, this assertion also fails to be a valid excuse.

In conclusion, the fact that women are treated unfairly in the business environment just
because of their gender is not a problem that concerns half of the humans; it concerns every single human being. In addition, there is no point in ignoring such a huge phenomenon and act as if it didn’t exist. We must abandon our old habits and accept the fact that neither sex is superior to the other. Where we are surrounded by evidence suggesting the fact, we are left with one question to ponder: How long are we going to ignore the truth?

References

Amy, J. (2005). Myth: The wage gap is caused by men’s higher pay for dangerous jobs.
Retrieved May 19, 2007, from
http://www.amptoons.com/blog/archives/category/economics-and-the-like/21/the-wage-gap-series.

Bergmann, B.R. (2005). The economic emergence of women. New York: Palgrave Macmillan.

Blau, F.D., & Brinton, M.C., & Grusky, D.B. (2006). The declining significance of gender?
New York: Russell Sage Foundation.

Boraas, S., & Rodgers, W.M. (2003). How does gender play a role in the earnings gap?
Retrieved May 1, 2007, from
http://findarticles.com/p/articles/mi_m1153/is_3_126/ai_101941070/

Douglas, C.A., & McCauley, M., & Ostrow, M., & Wimbrow, M. (2003). Women’s numbers in parliament rising, slowly.
Retrieved May, 21, 2007, from
http://findarticles.com/p/articles/mi_qa3693/is_200305/ai_n9206766/

Lindgren, J.R., & Palumbo, C.M., & Taub, N., & Wolfson, B.A. (2005). The law of sex discrimination. Belmont, CA: Clark Baxter.

Lynn, J. (1999). Labor issues – discriminating against an employee because she’s pregnant – sex discrimination.
Retrieved May, 18, 2007, from
http://findarticles.com/p/articles/mi_m0DTI/is_11_27/ai_57475920/

More articles coming soon!..