Java'da Syntax (Söz Dizimi) ve Bazı Kavramlar
Java'da program yazarken her dilde olduğu gibi belirli kurallar vardır. Öncelikle değişkenleri tanımlarken, fonksiyonları adlandırırken vs. Türkçe karakter (ı,ğ,ü,ş,ö,ç) kullanmayın, hata alırsınız.
Harf Duyarlılığı (Case Sensivite) : Java'da büyük-küçük harf duyarlılığı vardır. Mesela "alzhe" , "Alzhe" , "alZhe" , "aLzhE" farklı kelimeler olarak algılanmaktadır. Bunun nedeni her karakterin ASCII tablosunda farklı bir değere eşit olmasıdır. ASCII, karakterleri sayısal olarak ifade etmeye yarar. Bilgisayarlar sadece 1 ve 0'lardan anlar. Örneğin "A" harfini bilgisayar "01000001" olarak anlar. ASCII tablosunda da A harfi "65"tir. Bu ASCII tablosu sayesinde bilgisayarın anladığı dili, insanlar daha kolay anlarlar. Merak edenler için ASCII tablosunun resmini buraya bırakıyorum.
![LvPg2b.jpg](https://i.hizliresim.com/LvPg2b.jpg)
Sınıf (Class) Adları : Java'da sınıf, kendi içerisinde benzer özelliklerdeki değişkenlerin, fonksiyonların bulunduğu birimdir. Gerçek hayattan örnek vereyim. Kedi ve İnsan farklı iki nesnedir. Program içerisinde bir Kedi sınıfı ve İnsan sınıfı belirlediğimizi düşünelim. Kedinin çıkardığı ses, boyutu, beslenme şekli, doğum süresi Kedi sınıfının içerisinde; İnsanın çıkardığı ses, boyutu, beslenme şekli, doğum süresi de İnsan sınıfında tanımlanır. bu sınıf adlarını oluştururken her zaman ilk harfini büyük yazmalıyız "İnsan, Kedi, Araba, Kuslar vs". İki kelimeden oluşacak sınıf ismi koymak istersek her kelimenin ilk harfini büyük yazabiliriz karışıklık olmaması açısından. Örneğin "BenimSinifim, İlkAraba, UcanHayvanlar vs". Bu zorunlu değildir fakat aklınızın karışmaması açısından büyük önem taşır.
Metot (Method) Adları : Bazı dillerde fonksiyon olarak geçer. Programın bölünmüş parçaları diyebiliriz. Karmaşık programlar bu sayede bölünerek daha anlaşılır hale getirilir. Ayrıca program içerisinde yapacağımız bir değişiklik için programın ilgili diğer bölümlerini değiştirmek zorunda kalmamızın önüne geçer. Bu sayede de zaman ve performans kazancımız olur. Metot adları küçük harfle başlar ve burada da kolaylık açısından birden fazla kelime ile isimlendirirken diğer kelimelerin ilk harfini büyük yazabiliriz "benimMetotum, toplamaYap, calistir, arabaOlustur vs".
*Java'da, main metodu vardır. Program ilk olarak buradan derlenmeye başlar. Her Java programında kullanılması zorunludur.
Kod:
[COLOR="Lime"]public static vo id main(String args[])[/COLOR]
Dosya Adları : Belirlediğiniz sınıf adı ile aynı olmalıdır. Örneğin sınıf adını İlkSinif olarak belirlediyseniz dosya adı İlkSinif.java olmalıdır. Aksi takdirde programımız çalışmaz. İlkSinif.java yerine YeniSinif.java olarak belirlerseniz program YeniSinif classını bulamayacağı için hata alırsınız.
Nesne (Object) : Java, nesne tabanlı bir programlama dili olduğu için bu kavram çok önemlidir. Bahsettiğimiz "nesne" kavramı doğadaki nesneler değildir. Program içerisinde oluşturduğumuz nesneler kendi başına veri işleyebilir ve diğer nesnelerle bilgi alışverişi yapabilir. Bir ifadenin nesne olabilmesi için bellekte yer belirtmesi gerekir. Araclar adında bir sınıf oluşturduğumuzu varsayarsak, bir nesne şu şekilde tanımlanır:
Kod:
[COLOR="Lime"]Araclar yeniAraba = new YeniAraba(); [/COLOR]
Kod:
[COLOR="Lime"]yeniAraba.arabaRengi= "red"; [/COLOR]
Değişken (Veriable) Adları : Programda bulunan verileri birbirinden ayırmak için kullanılan bir terimdir. Değişkenler, büyük veya küçük harfle başlayabilir. Ayrıyeten "$" ve "_" karakterleri ile de başlayabilir. İçerisinde rakam bulundurulabilir. Değişken isimleri anlamsız da olabilir "asd" gibi. Fakat karmaşıklık olmaması açısından akılda kalıcı isimler konulması önemlidir. Örneğin "degisken", "sayi2", "$isim", "_hayvan", "kullanici_adi" vs. Değişkenler; Yerel (Local) değişkenler, Sınıf Değişkenleri, Nesne Değişkenleri olmak üzere 3'e ayrılır.
Yorum Satırları : Program içerisinde almak istediğimiz, başka okuyanların program içerisindeki yerleri anlaması için kullanılan bir özelliktir. Yorum satırlarında istediğiniz gibi Türkçe karakter, semboller vs kullanabiliriz çünkü program bu satırları kod olarak algılamaz. "Tekli Yorum Satırı (//...)" ve "Çoklu Yorum Satırı (/*...*/)" olmak üzere 2 çeşidi vardır. Örnek yorum satırı kullanımı:
Kod:
[COLOR="lime"]//Bu tek satırlık örnektir.[/COLOR]
Kod:
[COLOR="lime"]/*Bu çok satırlık örnektir.
*Buralara istediğimiz yorumu
*!´$t£dıĞ:mız $kıld£ yazabiliriz*/[/COLOR]
Kalıtım (Inheritance) : Java'da sınıflar, kendi içerisinde alt sınıflara ayrılabilir. Oluşturacağımız yeni sınıfın içerisindeki bazı özellikleri başka bir sınıfta bulundurması sebebiyle, o sınıfın bir alt sınıfı şeklinde yazmak kalıtımdır. Sınıftaki kod alanlarını ve metotları tekrardan kullanarak yeni sınıfınızda tekrardan yazma ihtiyacını ortadan kaldırır ve bize kolaylık sağlar. Gerçek hayattan örnek vereyim. Hayvanları düşünün. Kedi, Köpek, Kuş, Timsah farklı birer hayvandır fakat hepsinin ortak özellikleri (Oksijen alması, suya ihtiyaç duyması, beslenme ihtiyacı vs) vardır. Bu ortak özellikleri değişken olarak Hayvan sınıfında tanımlarız. Yeni türettiğimiz Kedi, Köpek, Kuş, Timsah alt sınıflarına bu özellikleri dahil ederiz. Böylece bu özellikleri tekrardan tanımlama ihtiyacımız ortadan kalkar. Burada Hayvan sınıfı superclass; yeni türeyen Kedi, Köpek, Kuş, Timsah alt sınıfları ise subclass olarak adlandırılır.
Kalıtımda önemli bir kavram ise "Arayüz (Interface)"dir. Java'da Arayüz, sınıflara benzer şekilde gösterilir fakat özellik tanımlaması yoktur. Nesnelerin birbirleriyle iletişim kurmasını sağlar. Arayüz içerisinde bu arayüzü kullanacak sınıflar için metotlar tanımlanır. Bunların uyarlanması alt sınıflar içerisinde gerçekleştirilir.
![00VDNB.jpg](https://i.hizliresim.com/00VDNB.jpg)
Java İle Neler Yapılabilir? - Örnekler -
Her kodun sonuna resim veya video ile çıktısını koyucam. Adettendir, ilk olarak ekrana "Merhaba Dünya!" yazdıralım
İlkProgram.java
Kod:
[COLOR="Lime"]public class İlkProgram {
public static vo id main(String[] args) {
System.out.println("Merhaba Dünya!");
}
}
[/COLOR]
![jqJnLJ.png](https://i.hizliresim.com/jqJnLJ.png)
Ekrana klavyeden girilen kelimenin palindromik olup olmadığını yazan program. Palindromik, tersten okunuşu aynı olan kelimelerdir.İlk önce palindromik olmayan bir kelime girip, sonra da palindromik olan bir kelime girip ekran çıktısına bakalım.
Palindromik.java
Kod:
[COLOR="lime"]import java.util.Scanner;
public class Palindromik {
public static vo id main(String args[])
{
String inputSting, reverseString = "";
Scanner in = new Scanner(System.in);
System.out.println("Kelime giriniz");
inputSting = in.nextLine();
int length = inputSting.length();
for ( int i = 0 ; i <= length-1 ; i++ ){
reverseString += inputSting.charAt(length-1-i); //Stringin tüm char'larını tersten alıp yeni stringe ekliyoruz..
}
if(inputSting.equals(reverseString)){
System.out.println("Palindromik Kelime");
}else{
System.out.println("Palindromik Kelime değil");
}
}
}
[/COLOR]
![2O7Zyv.png](https://i.hizliresim.com/2O7Zyv.png)
![BOX2E9.png](https://i.hizliresim.com/BOX2E9.png)
0 ile 1000 arasında random bir sayı oluşturarak bu sayının rakamları toplamını veren program.
Toplam.java
Nesneler arası haberleşmeye dayanan örneklere gelelim. 2 dosyayı tek program olarak çalıştıralım.
Merhaba.java
Diger.java
Kalıtıma örnek olarak boy karşılaştırması yapan program:
2 Boutlu Ağaç Animasyonu Programı
TreeAnimation.java
[ame="https://www.youtube.com/watch?v=FPJQ_KEPYl8"]https://www.youtube.com/watch?v=FPJQ_KEPYl8[/ame]
Havai Fişek Animasyonu
Diwali.java
[ame="https://www.youtube.com/watch?v=z75qOtMRhTc"]https://www.youtube.com/watch?v=z75qOtMRhTc[/ame]
Biraz da Appletler ile yapılabilecek programlara bakalım. İlk örneğimiz Durum Ayarlama Programı:
Status.java
[ame="https://www.youtube.com/watch?v=TYAHeamCzZY"]https://www.youtube.com/watch?v=TYAHeamCzZY[/ame]
Bu programımız, fare üzerine geldiğinde rengi değiştirecek bir dikdörtgen programı:
MauseMotion.java
[ame="https://www.youtube.com/watch?v=UclXzvMKf2o"]https://www.youtube.com/watch?v=UclXzvMKf2o[/ame]
[ame="https://www.youtube.com/watch?v=Ww2ILtPNuqg"]https://www.youtube.com/watch?v=Ww2ILtPNuqg[/ame]
Kod:
[COLOR="lime"]public class Toplam{
public static vo id main(String args[])
{
int randomSayi = (int)(Math.random()*(1000));
System.out.println("random sayi " + randomSayi);
int birler = randomSayi %10;
randomSayi = randomSayi /10;
int onlar = randomSayi %10;
int yuzler = randomSayi /10;
System.out.println("Toplamları ="+(birler+onlar+yuzler));
}
}
[/COLOR]
![DOXJ8z.png](https://i.hizliresim.com/DOXJ8z.png)
Nesneler arası haberleşmeye dayanan örneklere gelelim. 2 dosyayı tek program olarak çalıştıralım.
Merhaba.java
Kod:
[COLOR="lime"]class Merhaba{
public static vo id main(String args[]){
Diger digerObject = new Diger();
digerObject.simpleMessage();
System.out.println("\n Merhaba");
}
}[/COLOR]
Diger.java
Kod:
[COLOR="lime"]public class Diger{
public vo id simpleMessage() {
System.out.print("Bu Diger Bir Classtır.");
}
}
[/COLOR]
![EOlJbn.png](https://i.hizliresim.com/EOlJbn.png)
Benzer şekildeki programımıza bakalım. Bir dosyada ismini alsın, diğer dosyada ismini söylesin.
IsimGir.java
Kod:
[COLOR="lime"]import java.util.Scanner;
class IsimGir{
public static vo id main(String args[]){
Scanner input = new Scanner(System.in);
Diger digerObject = new Diger();
System.out.println("Adini Gir: ");
String name = input.nextLine();
digerObject.simpleMessage(name);
}
}
[/COLOR]
Diger.java
Kod:
[COLOR="lime"]public class Diger {
public vo id simpleMessage(String name) {
System.out.print("Merhaba " + name);
}
}
[/COLOR]
![mXlLrV.png](https://i.hizliresim.com/mXlLrV.png)
Kalıtıma örnek olarak boy karşılaştırması yapan program:
Main.java
Kod:
[COLOR="lime"]
public class Main {
public static vo id main (String args[]){
insan ali = new insan();
insan ahmet = ali;
ali.boy = 180;
if (ali==ahmet)
{
System.out.println("eşitler");
}
if(ali.equals(ahmet)){
System.out.println("eşitler2");
}
ogrenci ayse = new ogrenci();
ayse.boy = 160;
ogrenci fatma = (ogrenci)ayse.kopyala();
System.out.println(ayse.boy);
System.out.println(fatma.boy);
fatma.boy = 190;
System.out.println(ayse.boy);
System.out.println(fatma.boy);
if (ayse==fatma) {
System.out.println("eşitler3");
}
if(ayse.equals(fatma)){
System.out.println("eşitler4");
}
System.out.println(ayse);
System.out.println(ayse.hashCode());
}
}[/CENTER][/COLOR]
Insan.java
Kod:
[COLOR="lime"]class insan {
int boy;
}
class ogrenci extends insan implements Cloneable{
Object kopyala(){
ogrenci temp = new ogrenci();
temp.boy = this.boy;
return temp;
}
boolean equals(ogrenci rhs){
return this.boy == rhs.boy;
}
public String toString(){ //toString protected olduğundan public edilmiştir.
return "bu objenin boyu"+ this.boy;
}
}
[/COLOR]
![qAqBY5.png](https://i.hizliresim.com/qAqBY5.png)
2 Boutlu Ağaç Animasyonu Programı
TreeAnimation.java
Kod:
[COLOR="lime"]import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TreeAnimation {
public static final int SIZE_X = 1680;
public static final int SIZE_Y = 1050;
public static vo id main(String[] args) {
PFrame pframe = new PFrame();
pframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
PCanvas c = new PCanvas((int)pframe.getBounds().getWidth(),(int)pframe.getBounds().getHeight());
pframe.add(c);
pframe.setVisible(true);
}
}
class PFrame extends JFrame {
PFrame() {
setUndecorated(true);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(0,0,screenSize.width, screenSize.height);
KeyStroke escapeKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0, false);
Action escapeAction = new AbstractAction() {
public vo id actionPerformed(ActionEvent e) {
System.exit(0);
}
};
getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeKeyStroke,"ESCAPE");
getRootPane().getActionMap().put("ESCAPE", escapeAction);
}
}
class PCanvas extends Canvas {
public static final double TRIM_FACTOR = 0.80;
public static int SIZE_X;
public static int SIZE_Y;
public static final double INITIAL_LENGTH = 180;
public static final double EXIT_LENGTH = 10;
public static final double BRANCH_ANGLE = Math.PI / 9.0;
public static final int WAIT = 15;
public vo id paint(Graphics g) {
drawLine2(g, SIZE_X / 2, 0, INITIAL_LENGTH, Math.PI / 2);
}
PCanvas(int sizex, int sizey) {
SIZE_X = sizex;
SIZE_Y = sizey - sizey / 20;
setBackground(Color.black);
setForeground(Color.white);
}
public vo id drawLine2(Graphics g, double x1, double y1, double l, double theta) {
if (l < EXIT_LENGTH) {
return;
}
double x2 = x1 + l * Math.cos(theta);
double y2 = y1 + l * Math.sin(theta);
g.drawLine((int)x1, (int)(SIZE_Y - y1), (int)x2, (int)(SIZE_Y - y2));
drawLine2(g, x2, y2, l * TRIM_FACTOR, theta - BRANCH_ANGLE);
drawLine2(g, x2, y2, l * TRIM_FACTOR, theta + BRANCH_ANGLE);
}
}
[/COLOR]
[ame="https://www.youtube.com/watch?v=FPJQ_KEPYl8"]https://www.youtube.com/watch?v=FPJQ_KEPYl8[/ame]
Havai Fişek Animasyonu
Diwali.java
Kod:
[COLOR="lime"]import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;
import java.util.ArrayList;
import java.util.Iterator;
import java.io.File;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
public class Diwali {
public static vo id main(String[] args) {
Sounds.load();
PFrame pframe = new PFrame();
Animate a = new Animate(pframe.getCanvas());
a.start();
}
}
class PFrame extends JFrame {
private PCanvas canvas;
PFrame() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(0,0,screenSize.width, screenSize.height);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setUndecorated(true);
canvas = new PCanvas(screenSize.width, screenSize.height);
add(canvas);
setVisible(true);
this.addKeyListener(new KeyAdapter() {
public vo id keyPressed(KeyEvent ke) {
if (ke.getKeyCode() == KeyEvent.VK_ESCAPE) {
Animate.getRunner().interrupt();
}
}
});
}
public PCanvas getCanvas() {
return canvas;
}
}
class PCanvas extends Canvas {
private float x;
private float y;
public static float NUM_BALLS = 2;
public static float SIZE_X;
public static float SIZE_Y;
private ArrayList<Ball> balls;
private Random rnd;
PCanvas(float sizex, float sizey) {
SIZE_X = sizex;
SIZE_Y = sizey;
rnd = new Random();
balls = new ArrayList<Ball>();
for (int i = 1 ; i <= NUM_BALLS ; ++i) {
float angle = rnd.nextInt(180);
float x_init = 0.0f;
if (angle > 90) {
x_init = SIZE_X - rnd.nextInt(10);
} else {
x_init = rnd.nextInt(10);
}
float vel = 30+rnd.nextInt(10);
balls.add(new Ball(i,
rnd.nextInt(10),
x_init,
angle,
vel
));
}
setBackground(Color.black);
setForeground(Color.white);
}
public vo id paint(Graphics g) {
for (Ball ball : balls) {
ball.draw(g);
ball.updatePosition();
}
checkBounds();
}
public vo id checkBounds() {
ArrayList<Ball> newBalls = null;
for (Ball ball : balls) {
if (ball.getDeltaY() < 1 && ball.getID() < 100) {
newBalls = new ArrayList<>();
Sounds.playExplode();
for (int i=1;i<=50+rnd.nextInt(400);++i) {
float angle = rnd.nextInt(360);
float vel = 10+rnd.nextInt(40);
newBalls.add(new Ball(i*100,
ball.getX(),
ball.getY(),
angle,
vel
));
}
ball.setDeleted();
}
}
if (newBalls!=null && newBalls.size() > 0) {
balls.addAll(newBalls);
}
Iterator<Ball> ballIterator = balls.iterator();
while (ballIterator.hasNext()){
Ball ball = ballIterator.next();
if (ball.getY() < 10) {
ball.setDeleted();
}
if (ball.isDeleted()) ballIterator.remove();
}
}
public ArrayList<Ball> getBalls() {
return this.balls;
}
public vo id addBall() {
float angle = rnd.nextInt(180);
float x_init = 0.0f;
if (angle > 90) {
x_init = SIZE_X - rnd.nextInt(10);
} else {
x_init = rnd.nextInt(10);
}
float vel = 20+rnd.nextInt(20);
balls.add(new Ball(1,
x_init,
0,
angle,
vel,
10));
}
}
class Ball {
float x;
float y;
float theta;
float size = DEFAULT_SIZE;
float vel;
int id;
boolean deleted;
public static final float DEFAULT_SIZE = 6;
private float delta_x;
private float delta_y;
Ball(int id, float x,float y, float theta, float vel) {
this.id = id;
this.x = x;
this.y = y;
this.theta = theta;
this.vel = vel;
this.delta_x = vel * (float)Math.cos(Math.toRadians(theta));
this.delta_y = vel * (float)Math.sin(Math.toRadians(theta));
if (id < 100) Sounds.playRocket();
}
Ball(int id, float x,float y, float theta, float vel, float size) {
this.id = id;
this.x = x;
this.y = y;
this.theta = theta;
this.vel = vel;
this.delta_x = vel * (float)Math.cos(Math.toRadians(theta));
this.delta_y = vel * (float)Math.sin(Math.toRadians(theta));
this.size = size;
if (id < 100) Sounds.playRocket();
}
public vo id updatePosition() {
x = x + delta_x;
delta_y = delta_y - 1f;
y = y + delta_y;
}
public float getX() {
return x;
}
public float getY() {
return y;
}
public vo id setTheta(float theta) {
this.theta = theta;
this.delta_x = vel * (float)Math.cos(Math.toRadians(theta));
this.delta_y = vel * (float)Math.sin(Math.toRadians(theta));
}
public float getTheta() {
return theta;
}
public vo id draw(Graphics g) {
g.fillOval((int)x, (int)(PCanvas.SIZE_Y - y), (int)size, (int)size);
}
public String toString() {
return String.format("id=%d x =%d y = %d vel = %d theta = %d deltaY = %f" ,id, x, y, vel, theta, delta_y);
}
public vo id setDeltaY(float delta_y) {
this.delta_y = delta_y;
}
public float getDeltaY() {
return delta_y;
}
public vo id setDeltaX(float delta_x) {
this.delta_x = delta_x;
}
public float getDeltaX() {
return delta_x;
}
public float getVel() {
return vel;
}
public float getSize() {
return size;
}
public int getID() {
return id;
}
public vo id setDeleted() {
this.deleted = true;
}
public boolean isDeleted() {
return this.deleted;
}
}
class Animate implements Runnable {
private PCanvas canvas;
static Thread runner;
Animate(PCanvas canvas) {
this.canvas = canvas;
runner = new Thread(this);
}
public vo id run () {
while(!Thread.interrupted()) {
if (canvas.getBalls().isEmpty()) {
canvas.addBall();
canvas.addBall();
}
canvas.repaint();
try {
Thread.sleep(20);
}
catch(InterruptedException e) {
System.exit(0);
}
}
}
public vo id start() {
runner.start();
}
public static Thread getRunner() {
return runner;
}
}
class Sounds {
private static Clip clipExplode;
private static final String path = "";
public static ArrayList<Clip> clips = new ArrayList<>();
public static vo id load() {
try {
File audioFile = new File(path + "rocket.wav");
AudioInputStream stream = AudioSystem.getAudioInputStream(audioFile);
AudioFormat audioFormat = stream.getFormat();
byte[] sound = new byte[50000];
stream.read(sound);
DataLine.Info info = new DataLine.Info(Clip.class, audioFormat);
for (int i=1; i <= 2; ++i) {
Clip clipRocket = (Clip) AudioSystem.getLine(info);
clipRocket.open(audioFormat, sound, 0, sound.length);
clips.add(clipRocket);
}
audioFile = new File(path + "explode.wav");
stream = AudioSystem.getAudioInputStream(audioFile);
audioFormat = stream.getFormat();
sound = new byte[500000];
stream.read(sound);
info = new DataLine.Info(Clip.class, audioFormat);
clipExplode = (Clip) AudioSystem.getLine(info);
clipExplode.open(audioFormat, sound, 0, sound.length);
}
catch (Exception e) {
e.printStackTrace();
}
}
public static vo id playRocket() {
try
{
new Thread(new Runnable(){
public vo id run() {
try {
Clip clip = getRocketClip();
clip.start();
Thread.sleep(500);
clip.stop();
clip.setFramePosition(0);
}
catch(Exception e){}
}
}).start();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static Clip getRocketClip() {
for (Clip clip : clips) {
if (!clip.isRunning()) return clip;
}
return clips.get(0);
}
public static vo id playExplode() {
try
{
new Thread(new Runnable(){
public vo id run() {
try {
clipExplode.start();
Thread.sleep(300);
clipExplode.stop();
clipExplode.setFramePosition(0);
}
catch(Exception e){}
}
}).start();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}[/COLOR]
[ame="https://www.youtube.com/watch?v=z75qOtMRhTc"]https://www.youtube.com/watch?v=z75qOtMRhTc[/ame]
Biraz da Appletler ile yapılabilecek programlara bakalım. İlk örneğimiz Durum Ayarlama Programı:
Status.java
Kod:
[COLOR="lime"]import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Status extends Applet implements ActionListener
{
TextField statusField;
Button statusBtn;
public vo id init()
{
setLayout(new FlowLayout());
statusBtn = new Button("Durumu ayarla");
statusField = new TextField("Buraya yazınız.");
statusBtn.addActionListener(this);
statusField.addActionListener(this);
add(statusBtn);
add(statusField);
}
public vo id actionPerformed(ActionEvent ae)
{
if (ae.getSource() == statusBtn)
getAppletContext().showStatus(statusField.getText());
else
getAppletContext().showStatus(statusField.getText());
}
}
[/COLOR]
[ame="https://www.youtube.com/watch?v=TYAHeamCzZY"]https://www.youtube.com/watch?v=TYAHeamCzZY[/ame]
Bu programımız, fare üzerine geldiğinde rengi değiştirecek bir dikdörtgen programı:
MauseMotion.java
Kod:
[COLOR="lime"]import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class MouseMotion extends Applet implements MouseMotionListener
{
// Farenin kordinatları
int xpos;
int ypos;
//Dikdörtgenin özellikleri
int rect1xco,rect1yco,rect1width,rect1height;
boolean rect1Active;
public vo id init()
{
rect1xco = 20;
rect1yco = 20;
rect1width = 150;
rect1height = 75;
addMouseMotionListener(this);
}
public vo id paint(Graphics g)
{
if (rect1Active) g.setColor(Color.green);//Dikdörtgen aktifse yeşil
else g.setColor(Color.red);//değilse kırmızı renkli görünür.
g.fillRect(rect1xco,rect1yco,rect1width,rect1height);
g.setColor(Color.blue);
g.drawString("("+xpos+","+ypos+")",xpos,ypos);
}
public vo id mouseMoved(MouseEvent me)
{
xpos = me.getX();
ypos = me.getY();
if (xpos > rect1xco && xpos < rect1xco+rect1width && ypos >rect1yco && ypos < rect1yco+rect1height)
rect1Active = true;
else
rect1Active = false;
repaint();
}
// mouseMoved gibi çalışır, ama yalnızca fare aynı anda basıldığında
public vo id mouseDragged(MouseEvent me) {}
}[/COLOR]
[ame="https://www.youtube.com/watch?v=UclXzvMKf2o"]https://www.youtube.com/watch?v=UclXzvMKf2o[/ame]
Appletler ile köşegenlerde giden top programı:
AppletTest.java
Kod:
[COLOR="lime"]import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* [USER=585213]author[/USER] Alzhe01
*/
public class AppletTest extends Applet implements Runnable{
int dX, dY, dSpeed, dR;
int width, height;
public vo id init(){
dSpeed= 2;
dR= 100;
width= 800; height= 800;
dX= 0;
dY= 0;
this.setSize(width, height);
new Thread(AppletTest.this).start();
}
public vo id paint(Graphics yazdir){
yazdir.setColor(Color.red);
yazdir.fillOval(dX, dY, dR, dR);
}
[USER=277185]over[/USER]ride
public vo id run() {
while(true){
if ((dX+ dR >= width && dY+ dR >= height) || (dX < 0 && dY < 0)){
dSpeed*= -1;
}
dX+= dSpeed;
dY+= dSpeed;
repaint();
try {
Thread.sleep(10);
} catch (InterruptedException ex) {
}
}
}
}[/COLOR]
[ame="https://www.youtube.com/watch?v=Ww2ILtPNuqg"]https://www.youtube.com/watch?v=Ww2ILtPNuqg[/ame]
Appletler ile topun yere çarpmaması oyunu:
AppletOyunu.java
[ame="https://www.youtube.com/watch?v=YeokoFlsNoY"]https://www.youtube.com/watch?v=YeokoFlsNoY[/ame]
NOT: Yer alan programların bazılarını kendim yazıp bazılarını internetten araştırıp kullandım. Açıklama amaçlı değil de Java'da neler yapılabileceği hakkında aklınızda bir fikir oluşması açısından bu programları paylaştım. Kodların uzunluğu sizi korkutmasın. Yazarken çoğu parçalar halinde yazıldığı için zamanla gelişip bu programları kolaylıkla yazabilirsiniz.
Kod:
[COLOR="lime"]import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* [USER=585213]author[/USER] Alzhe01
*/
public class AppletOyunu extends Applet implements KeyListener, Runnable, MouseMotionListener {
Boolean isRunning = true;
int width;
int fps = 300;
int fpsa = 1000 / fps;
int height;
int score = 0;
int key;
Boolean dMove = true;
int dx, dy, dr, dSpeedX, dSpeedY;
int tableX, tableWidth, tableY;
Boolean gameOver = false;
public vo id init() {
width = 500;
height = 500;
dr = 30;
dSpeedX = 1;
dx = 20;
dSpeedY = 1;
dy = 100;
tableWidth = width / 2;
tableX = width / 2 - tableWidth / 2;
tableY = height - 10;
setSize(width, height);
addKeyListener(this);
addMouseMotionListener(this);
new Thread(AppletOyunu.this).start();
}
public vo id paint(Graphics g) {
g.setColor(Color.BLACK);
g.drawRect(0, 0, width, height);
g.setColor(Color.BLUE);
g.fillOval(dx, dy, dr, dr);
for (int i = 0; i < 10; i++) {
g.drawLine(tableX, tableY + i, tableX + tableWidth, tableY + i);
}
g.drawString(Integer.toString(score), width - 20, 20);
if (gameOver) {
g.drawString("OYUN BİTTİ", width / 2 - 10 * 3, height / 2);
g.drawString("Skorunuz= " + Integer.toString(score), width / 2 - 10 * 3, height / 2 + 10);
g.drawString("Bir Tuşa Basarak Çıkış Yapabilirsiniz", width / 2 - 35 * 3, height / 2 + 20);
isRunning = false;
}
if (!dMove) g.drawString("Oyun Duraklatıldı", width/2- 15*3, height/2);
}
public vo id move() {
if (dx > width - dr || dx < 0) {
dSpeedX = -dSpeedX;
}
if (dy <= 0) {
dSpeedY = -dSpeedY;
score++;
if (tableWidth > 10) {
tableWidth -= 20;
tableX += 10;
}
}
if (dx > tableX && dx + dr < tableX + tableWidth && dy + dr > tableY) {
dSpeedY = -dSpeedY;
}
if (dy > height + 100) {
gameOver = true;
}
dx += dSpeedX;
dy += dSpeedY;
}
[USER=277185]over[/USER]ride
public vo id keyTyped(KeyEvent e) {
}
[USER=277185]over[/USER]ride
public vo id keyPressed(KeyEvent e) {
key = e.getKeyChar();
if (key == KeyEvent.VK_SPACE) {
dMove= !dMove;
}
if (!isRunning) {
if (key == e.getKeyChar()) {
System.exit(0);
}
}
}
[USER=277185]over[/USER]ride
public vo id keyReleased(KeyEvent e) {
}
[USER=277185]over[/USER]ride
public vo id run() {
while (isRunning) {
if (dMove) {
move();
}
repaint();
try {
Thread.sleep(fpsa);
} catch (Exception e) {
}
}
}
[USER=277185]over[/USER]ride
public vo id mouseDragged(MouseEvent e) {
}
[USER=277185]over[/USER]ride
public vo id mouseMoved(MouseEvent e) {
if (e.getX() + tableWidth / 2 < width && e.getX() - tableWidth / 2 > 0) {
tableX = e.getX() - tableWidth / 2;
}
}
}
[/COLOR]
[ame="https://www.youtube.com/watch?v=YeokoFlsNoY"]https://www.youtube.com/watch?v=YeokoFlsNoY[/ame]
NOT: Yer alan programların bazılarını kendim yazıp bazılarını internetten araştırıp kullandım. Açıklama amaçlı değil de Java'da neler yapılabileceği hakkında aklınızda bir fikir oluşması açısından bu programları paylaştım. Kodların uzunluğu sizi korkutmasın. Yazarken çoğu parçalar halinde yazıldığı için zamanla gelişip bu programları kolaylıkla yazabilirsiniz.
SIRADAKİ KONU İÇİN TIKLA
Son düzenleme: