Programda birkaç eksiklik ve fazlalık var.
-
Pencerenin kapatma tuşuna basınca pencere kapanıyor ama program arkaplanda çalışmaya devam ediyor. Programın komple kapanabilmesi için her programda şunu eklemeniz gerekiyor.
pencere.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
switch-case ifadesi gereksiz olmuş. Onları hiç yazmasanız da olur.
-
Resimlerin ekranda görüntülenmemesinin sebebi pencerenin hemen yenilenmemesidir. Yani ekleme işlemini yaptıktan sonra, arayüzü yenilemelisiniz. Bir kaç yolu var. İncelemek için şuraya bakın
SwingUtilities.updateComponentTreeUI(win);
-
Butonun ikinci kez çalışmama durumu yok. Sadece her butona bastığınızda yeniden iki JLabel oluşturuyorsunuz ve pencereye önceden eklenmiş iki JLabel nesnesinin olduğu yere yerleştiriyorsunuz. Yani her seferinde ekrandaki JLabel sayısı artıyor gereksiz yere. Önlemenin iki yolu var. Ya önceki durumda eklediğiniz JLabel nesnelerinin resmini güncelleyeceksiniz ya da onları kaldırıp tekrar JLabel nesnesi ekleyeceksiniz.
-
Programınızı Nesne Yönelimli Programlamaya uygun yazarsanız yönetimi kolay olur. Ben sizin için programı tekrar düzenliyorum, inceleyebilirsiniz.
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
public class ZarAtma {
Random ran = new Random();
JFrame win;
JButton zarButon;
JLabel dicee1;
JLabel dicee2;
public ZarAtma() {
// Pencere ayarları
this.win = new JFrame("Zar Atma Uygulaması");
win.setSize(600, 400);
win.getContentPane().setBackground(new Color(36, 5, 2));
win.setLayout(null);
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Buton ayarları
this.zarButon = new JButton("Zar At");
zarButon.setBounds(240, 325, 100, 30);
zarButon.setBackground(new Color(10, 3, 2));
zarButon.setForeground(Color.LIGHT_GRAY);
zarButon.setBorderPainted(false);
zarButon.addActionListener((ActionEvent e) -> {
zarAt();
});
// Resim nesneleri
this.dicee1 = new JLabel();
this.dicee2 = new JLabel();
dicee1.setBounds(185, 100, 100, 100);
dicee2.setBounds(295, 100, 100, 100);
win.add(dicee1);
win.add(dicee2);
win.add(zarButon);
win.setVisible(true);
}
public void zarAt() {
int dice1 = ran.nextInt(6) + 1;
int dice2 = ran.nextInt(6) + 1;
System.out.println(dice1 + " " + dice2);
dicee1.setIcon(new ImageIcon("/home/coderistan/dices/" + dice1 + ".png"));
dicee2.setIcon(new ImageIcon("/home/coderistan/dices/" + dice2 + ".png"));
SwingUtilities.updateComponentTreeUI(win);
}
public static void main(String[] args) {
// Program başlangıç noktası
new ZarAtma();
}
}
Zar resimlerinden olan 1.png dosyasının boyutu büyük, o yüzden onun boyutunu 100x100 olarak ayarlarsanız herşey tamamdır.