JavaFx Multiple Media Player

sebelumnya minta maaf, karena artikel ini tidak di publish tepat waktu; hari ini “agak kacau”, sehingga nulis blogpun jadi tidak sempat ;) . dan karena itu, nulis artikelnya juga males :p, langsung publish source code-nya saja ya, nanti semoga ada kesempatan lain untuk menuliskan artikelnya. tapi jangan kuatir, codenya sangat clean, jadi sangat mudah dipahami :D

file: Main.fx

def mymp1 = MyMediaPlayer{
    mediaURL: "file:///F:/Harmony.flv"
    width: 200
    height: 150
    translateX: 10
}

def mymp2 = MyMediaPlayer{
    mediaURL: "file:///F:/Movies/video6.flv"
    width: 200
    height: 150
    translateX: 300
}

def scene = Scene {
    content: [mymp1,mymp2]/*HBox{
        translateY : 20
        spacing: 100
        content:[mymp1,mymp2]}//playerGroup;*/
}

def stage:Stage = Stage {
    title: "MyApp"
    scene: scene
    width: bind width with inverse
    height: bind height with inverse
    fullScreen : bind isfullscreen with inverse
    //style : bind stagestyle with inverse
}

file: myMediaPlayer.fx


/*
 * MyMediaPlayer.fx
 *
 * Created on 23 Mar 09, 23:39:24
 */

package mymediaplayer;
import javafx.scene.CustomNode;
import javafx.scene.Node;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.Group;
import javafx.scene.media.MediaView;
import javafx.ext.swing.SwingButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
/**
 * @author Hakim
 */

public class MyMediaPlayer extends CustomNode{
    public var mediaURL:String = "";
    public var width:Number = 500;
    public var height:Number = 300;
    var isfullscreen:Boolean = false;
    public var maxX = 200.0;
    public var maxY = 200.0;
    var startX = 0.0;
    var startY = 0.0;

    override function create():Node{
        return Group{
            content: [mv, buttonGroup]
            onMouseClicked: mouseClicked
        }
    }

    def media = Media {
        source: mediaURL
    }

    def mp = MediaPlayer {
        media: media
        autoPlay: false
    }

    def mv = MediaView {
        preserveRatio: false
        mediaPlayer: mp
        preserveRatio : false;
        fitWidth : bind width;
        fitHeight: bind height;
    }

    function play():Void{
        mp.play();
    }

    function pause():Void{
        mp.pause();
    }

    function stop():Void{
        mp.stop();
    }

    def buttonPlay = SwingButton {
        text: "Play"
        action: play
    }

    def buttonPause = SwingButton {
        text: "Pause"
        action: pause
    }

    def buttonStop = SwingButton {
        text: "Stop"
        action: stop
    }

    function fullScreen(){
        isfullscreen = not isfullscreen;
    }

    function mouseClicked(e:MouseEvent){
        if (e.clickCount == 2){
            fullScreen();
        }
    }

    def buttonGroup = HBox{
        content: [buttonPlay, buttonPause, buttonStop]
        translateX: bind (width - buttonPlay.boundsInParent.width*3)/2;
    }

    override var onMousePressed = function(e:MouseEvent):Void {
        startX = e.sceneX-translateX;
        startY = e.sceneY-translateY;
    }

    override var onMouseDragged = function(e:MouseEvent):Void {
        var tx = e.sceneX-startX;
        translateX = tx;

        var ty = e.sceneY-startY;
        translateY = ty;
    }
}

media playernya bersifat draggable, sehingga bisa di drag dari posisi awal.
screenshotnya:
multiplemediaplayer

Iklan

Shalat Istikharah ( Kapan & Bagaimana )

Hari ini seorang sahabat mengingatkan saya, karena saya secara tergesa – gesa mengambil suatu pilihan tanpa shalat istikharah. Bagi seorang muslim, jalan terbaik saat digamangkan oleh beberapa pilihan, adalah dengan melaksanakanan sholat istikharah. Sholat yang tidak mengapa jika hanya 2 rakaat, dan tidak masalah jika kita melaksanakannya, baik di waktu sepertiga malam terakhir maupun di siang hari.

Sejujurnya, saya sendiri merasa kurang pantas untuk menuliskan panjang lebar perihal sholat ini, oleh karena itu cukuplah sebuah tanya jawab antara ustadz Ahmad Sarwat dengan seorang penanya berikut sebagai penjelasannya, kutipannya tanya jawab tersebut adalah sebagai berikut:

Assalamu’alaikum wr wb 

Ustadz Ahmad Sarwat Lc, yang insya Allah dimuliakan oleh Allah SWT, saya mau tanya kapankah kita seharusnya melakukan shalat istikharah dan dari segi waktunya apakah shalat Istikharoh ada batasan waktu? Seperti hanya dikerjakan pada waktu qiyyamullail dan sebagainya. Dan apakah jawabannya selalu lewat mimpi?

Xda

Jawaban:

Sholat istikharah boleh dilaksanakan kapan saja, baik siang maupun malam. Kalau dilakukan malam hari pada saat shalat tahajjud karena memang waktu seperti itu sangat utama. Namun intinya adalah ketika kita menghadapi persoalan yang berat maupun yang ringan. Dalam hadis Rasulullah SAW bersabda: 

“Apabila salah seorang diantar kalian berniat melakukan suatu urusan, hendaklah dia sholat dua raka’at yang bukan fardhu kemudian hendaklah dia berdo’a , “Allahumma…” (HR Bukhari) 

Dalam hadits tersebut dijelaskan waktunya adalah kapan saja dan tidak terikat. Oleh karena itu Imam An-Nawawi berkata, “Istikharah disunnahkan dilaksanakan di segala kondisi sebagaimana dijelaskan oleh nash hadis di atas.” (Al-Adzkar) hal tersebut juga dikemukakan oleh Ibnu Hajar Al-Asqolani (Fathul Bari 11/184) 

Dalam hadis tidak dijelaskan bagaimana jawaban akan diberikan, meskipun Imam Nawawi dalam kitabnya Al-Adzkar menyatakan hendaklah orang tersebut memilih sesuai dengan pilihan hatinya (hatinya menjadi contong terhadap suatu pilihan setelah sholat). 

Tetapi pendapat tersebut ditentang oleh sejumlah ulama karena hadis yang menjadi rujukan Imam Nawawi adalah hadis dhoif. Para ulama hanya menegaskan bahwa jangan memilih pilihan yang ada sebelumnya yang hanya berdasarkan kepada hawa nafsu (Fathul bari 11/187) 

Jadi yang seharus dilakukan adalah, setelah kita melaksanakan sholat istikharah kita pilih mana yang terbaik (berazam) dan meyerahkan segala urusannya pada Allah. Karena kalau pilhan tersebut adalah pilihan yang terbaik, maka Allah akan memudahkannya bagi orang tersebut dan akan memberkahinya. Tetapi jika hal tersebut adalah sebaliknya maka Allah akan memalingkannya dan memudahkan orang tersebut kepada kebaikan dengan idzin-Nya. (Bughyatul Mutathowwi’ Fi Sholat At-Tathowwu’ hal 105) 

Kami tidak mendapatkan dalil shohih yang menjelaskan tentang batasan minimum maupun maksimum pelaksanaan sholat istikharah. Sedangkan hadis yang diriwayatkan oleh Ibnu sunni dari Anas r.a. ia berkata: Rasulullah SAW bersabda, “Wahai Anas, apabila engkau berniat melaksanakan suatu urusan, maka minta pilihan pada tuhanmu mengenai urusan tersebut tujuh kali, kemudian perhatikan mana urusan yang pertama dipilih oleh hatimu, karena kebikan ada padanya.” 

Hadis di atas dihoif sebagaimana dikemukakan oleh Ibnu Hajar, “Sanadnya dhoif sekali.” (Fathul Bari 11/187). Al-Iroqi berkata, “Mereka (para rowi) memang terkenal tetapi di antara mereka ada rowi yang terkenal dengan kedhoifannya (bahkan sangat dhoif) yaitu Ibrohim bin Al-Baro” (Kitab Al-Adzkar An-Nawawi dan Tuhfatul Abror As-Suyuthi hal 162-163) 

Apakah Jawabannya Selalu Lewat Mimpi?

Tidak ada satu keterangan pun yang menjelaskan bahwa hasil dari sholat istikharah akan ada pada mimpi. Sejumlah ulama di antaranya Imam An-Nawawi menyatakan bahwa pilihan akan diberikan kepada orang yang melaksanakan sholat tersebut dengan dibukakan hatinya untuk menerima atau melakukan suatu hal. 

Tetapi pendapat ini ditentang oleh sejumlah ulama diantaranya Al-‘Iz bin Abdis-Salam, Al-Iroqi dan Ibnu Hajar. Bahwasanya orang yang telah melaksanakan sholat istikharah hendaklah melaksanakan apa yang telah diazamkannya, baik hatinya menjadi terbuka maupun tidak tidak. 

Ibnu Az-Zamlakani berkata, “Apabila seseorang melaksanakan sholat istikharah dua rakaat karena sesuatu hal, maka hendaklah ia mengerjakan apa yang memungkinkan baginya, baik hatinya menjadi terbuka untuk melakukannya atau tidak, karena sesungguhnya kebaikan ada pada apa yang dia lakukan meskipun hatinya tidak menjadi terbuka.” Beliau berpendapat karena dalam hadis Jabir tidak dijelaskan adanya hal tersebut (Thobaqot Asy-Syafi’iyah/ Ibnu As-Subki 9/206). 

Sedangkan hadis Anas bin Malik yang dijadikan alasan oleh Imam Nawawi didhoifkan oleh sejumlah ulama (Fathul Bari 11/187) 

Wallahu a’lam 

update:
doa setelah shalat istikharah (diriwayatkan oleh Jabir ibn Abdillah r.a dalam Sahih Bukhari)

((اَللَّهُمَّ إِنِّيْ أَسْتَخِيْرُكَ بِعِلْمِكَ، وَأَسْتَقْدِرُكَ بِقُدْرَتِكَ، وَأَسْأَلُكَ مِنْ فَضْلِكَ الْعَظِيْمِ، فَإِنَّكَ تَقْدِرُ وَلاَ أَقْدِرُ، وَتَعْلَمُ وَلاَ أَعْلَمُ، وَأَنْتَ عَلاَّمُ الْغُيُوْبِ. اَللَّهُمَّ إِنْ كُنْتَ تَعْلَمُ أَنَّ هَذَا اْلأَمْرَ -وَيُسَمَّى حَاجَتَهُ- خَيْرٌ لِيْ فِيْ دِيْنِيْ وَمَعَاشِيْ وَعَاقِبَةِ أَمْرِيْ -أَوْ قَالَ: عَاجِلِهِ وَآجِلِهِ- فَاقْدُرْهُ لِيْ وَيَسِّرْهُ لِيْ ثُمَّ بَارِكْ لِيْ فِيْهِ، وَإِنْ كُنْتَ تَعْلَمُ أَنَّ هَذَا اْلأَمْرَ شَرٌّ لِيْ فِيْ دِيْنِيْ وَمَعَاشِيْ وَعَاقِبَةِ أَمْرِيْ -أَوْ قَالَ: عَاجِلِهِ وَآجِلِهِ- فَاصْرِفْهُ عَنِّيْ وَاصْرِفْنِيْ عَنْهُ وَاقْدُرْ لِيَ الْخَيْرَ حَيْثُ كَانَ ثُمَّ أَرْضِنِيْ بِهِ)).


Ya Allah, sesungguhnya aku meminta pilihan yang tepat kepadaMu dengan ilmu pengetahuanMu dan aku mohon kekuasaanMu (untuk mengatasi persoalanku) dengan kemahakuasaanMu. Aku mohon kepadaMu sesuatu dari anugerahMu Yang Maha Agung, sesungguhnya Engkau Mahakuasa, sedang aku tidak kuasa, Engkau mengetahui, sedang aku tidak mengetahuinya dan Engkau adalah Maha Mengetahui hal yang ghaib. Ya Allah, apabila Engkau mengetahui bahwa urusan ini (orang yang mempunyai hajat hendaknya menyebut persoalannya) lebih baik dalam agamaku, dan akibatnya terhadap diriku atau -Nabi Shallallahu’alaihi wasallam bersabda: …di dunia atau akhirat- sukseskanlah untukku, mudahkan jalannya, kemudian berilah berkah. Akan tetapi apabila Engkau mengetahui bahwa persoalan ini lebih berbahaya bagiku dalam agama, perekonomian dan akibatnya kepada diriku, maka singkirkan persoalan tersebut, dan jauhkan aku daripadanya, takdirkan kebaikan untukku di mana saja kebaikan itu berada, kemudian berilah kerelaanMu kepadaku.

Javafx Flower

contoh sederhana program javafx yang kubuat malam ini:

flower for you :)
flower for you :)

ada satu konsep yang mungkin akan menarik, yaitu masalah z-order node pada javafx. untuk mengatur z-order sebuah node, javafx hanya punya dua fungsi yaitu “toFront()” dan “toBack()”. hal ini akan menjadi masalah karena toFront akan membuat node tersebut berada pada paling atas dari semua node yang ada di scene, dan sebaliknya toBack() akan menjadikannya berada pada order paling bawah.

untuk mengatasi permasalahan ini, cara yang saya gunakan adalah dengan memasukkan node tersebut ke dalam sequence dan kemudian mengatur urutannya dalam sequence tersebut. dan setelah urutannya sesuai maka bisa di attach ke Scene.Read More »

JavaFX with Passion! Puzzler #1

this is my code to solve the javafx with passion puzzler #1

/*
* NewJavaFXEmpty.fx
*
* Created on 24 Mar 09, 6:59:19
*/

package goobooks;

import javafx.ext.swing.SwingSlider;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.transform.Rotate;

/**
* @author Hakim
*/

def font = Font{name:”Arial”, size: 40, embolden:true}
def angle = bind slider.value;
var width:Number = 350;
var height:Number = 300;
var pivoty:Number = bind text.boundsInParent.height/2;
var tx = bind (width – text.boundsInLocal.width)/2;
var ty = bind (height – text.boundsInLocal.height)/2;

def slider = SwingSlider {
width: bind width*2/3
translateX: bind width/6
minimum: 0
maximum: 360
value: 0
vertical: false
}

function formatString(num:Integer):String{
if (num < 10) return "Angle: 00{num}" else if (num >= 10 and num < 100) return "Angle: 0{num}" else return "Angle: {num}"; } def text:Text = Text { font: font fill: Color.BLUE translateX: bind tx translateY: bind ty style: "font-weight:bold" rotate: bind angle content: bind formatString(angle) } def scene:Scene = Scene { content: [ slider, text ] } Stage { title: "RotSlider" width: bind width with inverse height: bind height with inverse scene: scene } [/sourcecode]

FullScreen Javafx MediaPlayer

hari ini dapat email dari milist javafxprogramming, ada yang bertanya bagaimana untuk membuat mediaplayer di javafx untuk memainkan file multimedia (video) dalam fullscreen mode.  Setelah memberikan jawaban di milist tersebut, kini saatnya saya berbagai dengan anda, bagaimana cara membuat fullscreen player.

Sebenarnya ini sangat simple. Untuk memainkan video dalam format fullscreen, yang perlu dilakukan hanya mengatur properti fitWidth dan fitHeight dari mediaView sedemikian sehingga adalah ukuran dari screen.  Karena saya tidak menghendaki mediaplayer saya, muncul secara langsung dalam format fullscreen, maka yang saya lakukan adalah membinding (bind) nilai kedua properti tersebut (fitWidth dan fitHeight) dengan ukuran Stage. dan Stage inilah yang akan diatur – atur properti fullScreen-nya sehingga dalam keadaan fullScreen atau tidak.

Daripada pusing, mendingan langsung kita coba saja :)

/*
 * MyMediaPlayer.fx
 *
 * Created on 19 Mar 09, 6:30:13
 */

package simplevideoplayer;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.Group;
import javafx.scene.media.MediaView;
import javafx.ext.swing.SwingButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
/**
 * @author Hakim
 */

def mediaURL = "file:///c:/Downloads/video6.flv";
var width:Number = 500;
var height:Number = 300;

def media = Media {
    source: mediaURL
}

def mp = MediaPlayer {
    media: media
    autoPlay: false
}

def mv = MediaView {
    preserveRatio: true
    mediaPlayer: mp
    preserveRatio : false;
    fitWidth : bind width;
    fitHeight: bind height;
}

function play():Void{
    mp.play();
}

function pause():Void{
    mp.pause();
}

function stop():Void{
    mp.stop();
}

def buttonPlay = SwingButton {
    text: "Play"
    action: play
}

def buttonPause = SwingButton {
    text: "Pause"
    action: pause
}

def buttonStop = SwingButton {
    text: "Stop"
    action: stop
}

function fullScreen(){
    stage.fullScreen = not stage.fullScreen;
}

function mouseClicked(e:MouseEvent){
    if (e.clickCount == 2)
        fullScreen();
}

def buttonGroup = HBox{
    content: [buttonPlay, buttonPause, buttonStop]
    translateX: bind (width - buttonPlay.boundsInParent.width*3)/2;
}

var playerGroup:Group = Group{
    content: [mv, buttonGroup]
    onMouseClicked: mouseClicked
}

def scene = Scene {
    content: playerGroup;
}

def stage:Stage = Stage {
    title: "MyApp"
    scene: scene
    width: bind width with inverse
    height: bind height with inverse
    fullScreen : true

}

screenshotnya:
leave-out-all-the-rest

 

did you noticed, how beautyful my code was :) .  yup, ini semua setelah membaca Clean Code -nya Robert C. Martin (lain kali insya Allah aku tulis, bagaimana membuat kode program yang clean, menurut buku tersebut :) )

Siapa nyari saya, ada apa, ada perlu apa? :P

Beberapa detik yang lalu saya memeriksa statistik blog ini, hitnya kok tiba2 tinggi, dan terlihat ada yang sedang nyari saya lewat serach engine:

nyari-siapa

semoga saja bukan debt collector :P

kalau memang ada perlu dengan saya, misalnya pengen ngajak makan, jalan – jalan, outbound, acara walimah :P, hiking, ta’aruf :) , atau mungkin mengajak kerjasama bisnis :) , jangan sungkan untuk email langsung, OK

 

disclaimer: bukan lagi narsis :)

* menurutku dugaanku ini ada kaitannya dengan myquran

Belajar Javafx, mulai dari mana?

untuk menjawab beberapa pertanyaan mengenai cara belajar javafx, maka pada posting kali ini saya ingin membagikan beberapa link yang sangat bermanfaat bagi anda dalam belajar pemrograman javafx script:

1. official javafx: http://javafx.com

2. milist pemrograman javafx : javafxprogramming

3. Kursus online gratis: http://www.javapassion.com/javafx/

4. javafx blog: http://blogs.sun.com/javafx/

5. blognya james weaver: http://learnjavafx.typepad.com/weblog/

6.  javafx studio : http://jfxstudio.wordpress.com/

dan tentu saja buku2 yang menarik jika anda mau dan mampu membelinya:

1. JavaFX: Developing Rich Internet Applications (Java Series)

2. Pro JavaFX

3. JavaFX in Action

4. JavaFX Developer’s Guide

 

selamat belajar, dan jangan lupa untuk membuat aplikasi yang bermanfaat bagi sebanyak mungkin orang :)