Thursday, November 19, 2009

Jawaban Kuis 5

Pembahasan hari ini merupakan jawaban kuis 5 nomor 1 dan 2. Kedua nomor tersebut sengaja digabung, bahkan diperluas sehingga posisi meriam dapat dengan leluasa dipindahkan sesuai dengan slider yang ada di bawah jScrollPane. Pada saat menjalankan program yang sudah jadi, coba geser slidernya dengan menggunakan mouse yang di tekan (tombol kirinya). Setelah itu coba mouse masuk kembali ke jScrollPane. Amati apa yang terjadi.

Supaya user tidak bingung menentukan bagian depan atau belakang dari meriam, maka sengaja pada bagian depan diletakkan peluru yang diam relatif terhadap bagian depan meriam tersebut.

Program lengkap dapat di download melalui link ini. Namun demikian, bagian terpenting dari program tersebut juga disajikan di sini.

Berikut ini adalah class Meriam:

package noFrame;
import javax.swing.*;
import java.awt.*;

public class Meriam extends JPanel{
   private int xPorosMeriam, yPorosMeriam, xMouse, yMouse;
   private int[] xUjungMeriam, yUjungMeriam;
   public Meriam(int xPorosMeriam, int yPorosMeriam,
      int xMouse, int yMouse){
       this.xPorosMeriam = xPorosMeriam;
       this.yPorosMeriam = yPorosMeriam;
       this.xMouse = xMouse;
       this.yMouse = yMouse;
   }
   public void paintComponent(Graphics g){
       xUjungMeriam = new int[4];
       yUjungMeriam = new int[4];
       double rusuk = Math.min(getWidth(), getHeight()) * 0.1;
       double theta = Math.atan2(yMouse-yPorosMeriam,
xMouse-xPorosMeriam);


       //Meriam
       Polygon p = new Polygon();
       for(int index=0; index<4;>
          xUjungMeriam[index] = (int)(xPorosMeriam +
          rusuk * Math.cos(Math.PI*(1+2*index)/4 + theta));
          yUjungMeriam[index] = (int)(yPorosMeriam +
          rusuk * Math.sin(Math.PI*(1+2*index)/4 + theta));
          p.addPoint(xUjungMeriam[index], yUjungMeriam[index]);

       }
       g.setColor(Color.yellow);
       g.fillPolygon(p);
       g.setColor(Color.magenta);
       g.drawPolygon(p);

       //Peluru Diam Di UjungMeriam (ikut berputar bersama meriam)
       int xPeluruDiUjungMeriam = (int)(xPorosMeriam +rusuk*Math.cos(theta));
       int yPeluruDiUjungMeriam = (int)(yPorosMeriam +rusuk*Math.sin(theta));
       g.setColor(Color.pink);
       g.fillOval((int)(xPeluruDiUjungMeriam-rusuk/2),
           (int)(yPeluruDiUjungMeriam-rusuk/2),
           (int)rusuk, (int)rusuk);
    }
}


Class Meriam tersebut perlu dipanggil dari

private void jScrollPane1MouseMoved(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
    int xMeriam = jSlider1.getValue()*jScrollPane1.getWidth()/100;
    int yMeriam = jScrollPane1.getHeight()*3/4;
    Meriam belina = new Meriam(xMeriam, yMeriam, evt.getX(), evt.getY());
    jScrollPane1.add(belina);
    jScrollPane1.setViewportView(belina);
    repaint();
}

Ada komentar / pertanyaan ? Mantab to ????????? Apakah anda jadi penasaran ingin melanjutkan melepas peluru yang diam itu dengan meng-klik mouse ?? Kalau ya, bisakah anda melanjutkan pemrogramannya ??

No comments:

Post a Comment