Saturday, May 28, 2016

Running Text dengan Thread JavaFX



Ok guys kali ini kita saya akan membagikan cara membuat running teks. Caranya simple aja dengan mengunakan thread di java. Untuk memulai ikuti langkah berikut ini : 
1.       Buka Netbeans

2.       Buat project baru bernama RunningText
3.       Buka file RunningText.java kemudian ketik kode di bawah ini.
public class RunningText extends Application {

    Task runningTextWorker;

    String message = "Halo semua ini adalah running text untuk menampilkan tulisan berjalan yang akan bergerak dari sebelah kiri ke kanan secara terus-menerus sehingga membuat tampilan menjadi lebih menarik";

    Text runningText = new Text(message);

    HBox hBox = new HBox();

    Scene scene;

   

    @Override

    public void start(Stage primaryStage) {

        BorderPane root = new BorderPane(); 

        scene = new Scene(root, 300, 250);

       

        hBox.getChildren().add(runningText);       

        hBox.setTranslateX(scene.getWidth());

        runningTextWorker = createWorkerRunning(true);


        root.setTop(hBox);


        primaryStage.setTitle("Hello World!");

        primaryStage.setScene(scene);

        primaryStage.show();

       

        new Thread(runningTextWorker).start();

    }

   

    private Task createWorkerRunning(final boolean running) {

        return new Task() {

            @Override

            protected Object call() throws Exception {

                int batas = hBox.widthProperty().intValue()+scene.widthProperty().intValue();

                while (running) {

                    for (int i = 1; i <= batas; i++) {

                        if (batas == i) {

                            hBox.setTranslateX(scene.widthProperty().intValue());

                        } else {

                            hBox.setTranslateX(hBox.getTranslateX() - 1);

                            Thread.sleep(50);

                            System.out.println(i);

                        }

                    }

                }

                return true;

            }

        };

    }


    @Override

    public void stop() throws Exception {

        super.stop();

        runningTextWorker.cancel();

    }

   

   


    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        launch(args);

    }

   

}

Mari kita bahas kode di atas, pertama-tama kita buat 4 variabel. Sebuah objek dari kelas Task bernama runningTextWorker yang digunakan untuk membuat perintah yang akan dijalankan oleh thread. String message digunakan untuk menampung data yang akan ditampilkan lewat running text. Kemudian kita buat sebuah objek Text bernama runningText yang digunakan sebagai container untuk menampilkan pesan. Sebuah objek HBox disini digunakan sebagai container untuk objek Text dikarenakan objek Text tidak mempunyai property widthProperty yang digunakan dalam proses running nantinya. Sebuah scene digunakan untuk menampung dan menampilkan hasil dari running tadi yang akan ditampilkan pada objek Text.

Task runningTextWorker;
String message = "Halo semua ini adalah running text untuk menampilkan tulisan berjalan yang akan bergerak dari sebelah kiri ke kanan secara terus-menerus sehingga membuat tampilan menjadi lebih menarik";
Text runningText = new Text(message);
HBox hBox = new HBox();
Scene scene;

Langkah selanjutnya adalah hapus semua perintah yang ada dalam method start(). Kemudian buat root yang merupakan objek dari BorderPane dan inisialisasikan scene yang kita buat di atas tadi dan tambahkan pada root. Kemudian tambahkan runningText yang kita buat tadi ke dalam hBox agar runningText yang kita buat tadi dapat diubah letaknya, mengingat node Text tidak mempunyai method widthProperty yang digunakan dalam thread nantinya. Setelah itu ubah setTranslateX dari HBox yang kita buat tadi sesuai dengan ukuran lebar scene agar runningText tidak tampak dan berada di sebelah kanan dari scene.
BorderPane root = new BorderPane();
scene = new Scene(root, 300, 250);
hBox.getChildren().add(runningText);
hBox.setTranslateX(scene.getWidth());
Kemudian kita inisialisasikan runningTextWorker yang kita buat tadi menggunakan method createWorkerRunning(true) agar task selalu dieksekusi. Di dalam method createWorkerRunning kita membuat looping yang akan mengeksekusi dimana ketika property dari translateX telah mencapai batas maka setTranslateX akan dikembalikan pada posisi awal, jika tidak maka property translateX akan dikurangi 1.
private Task createWorkerRunning(final boolean running) {
return new Task() {
@Override
protected Object call() throws Exception {
   int batas = hBox.widthProperty().intValue()+scene.widthProperty().intValue();
  while (running) {
    for (int i = 1; i <= batas; i++) {
      if (batas == i) {
        hBox.setTranslateX(scene.widthProperty().intValue());
      } else {
        hBox.setTranslateX(hBox.getTranslateX() - 1);
        Thread.sleep(50);
        System.out.println(i);
     }
    }
  }
  return true;
}
};
}
Kemudian kita tambahkan hBox yang kita buat tadi ke dalam root dengan mengaturnya kepada bagian atas dari layar. Kita ubah judul dari primaryStagenya, set scennenya dan menampilkanya.
                root.setTop(hBox);

                primaryStage.setTitle("Running Text");
                primaryStage.setScene(scene);
                primaryStage.show();
Setelah itu kita buat sebuah thread dan tambahkan runningTextWorker yang kita buat tadi kemudian panggil method start() dari Thread untuk memulainya. Dan setelah itu jangan lupa panggil method requestFocus() pada primaryStage agar runningText tampak, karena saat thread dieksekusi maka focus akan berpindah pada thread yang berjalan di background dari aplikasi.
new Thread(runningTextWorker).start();
primaryStage.requestFocus();
Coba run dan akan tampil seperti di bawah ini:

 
Sekian tutorial cara membuat runningText dari saya, semoga bermanfat bagi agan2 semua. Sekian dan Terima Kasih

No comments:

Post a Comment