Monday, May 27, 2013

Bikin Animasi Compiz di JavaFX

Berikut ini akan saya berikan bagaimana caranya membuat "semacam piring" dengan javaFX. Jika anda sudah bisa memahami tutorial kali ini, saya yakin anda bisa membuat banyak hal yang menarik.



adapun sourcenya:
package fjr.booksample;
 
import javafx.scene.transform.Rotate;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Orientation;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.control.Slider;
import javafx.scene.control.SliderBuilder;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.RectangleBuilder;
 
//author fajar
public class MakeABall extends Application {
 
  private void init(Stage primaryStage) {
  final Group root = new Group();
  StackPane mainPane = new StackPane();
  mainPane.setMinSize(500, 500);
 
  primaryStage.setScene(new Scene(mainPane));
 
  Group ensembel = new Group();
  double angle = 0;
  for (int i = 0; i < 10; i++) {
   Rectangle rect = RectangleBuilder.create().width(100).height(100)
     .rotationAxis(Rotate.Y_AXIS).rotate(90).fill(getColor()[i])
     .build();
   Xform xform = new Xform();
   xform.getChildren().add(rect);
   xform.rz.setAngle(45);
   xform.setTranslateX(200);
   Xform xform1 = new Xform();
   xform1.getChildren().add(xform);
   xform1.ry.setAngle(angle);
   ensembel.getChildren().add(xform1);
   angle += 36;
  }
 
  ensembel.setTranslateX(200);
  ensembel.setTranslateY(200);
  ensembel.setRotationAxis(Rotate.Z_AXIS);
  root.getChildren().add(ensembel);
 
  final Slider slider = SliderBuilder.create()
    .orientation(Orientation.VERTICAL).minWidth(50).minHeight(50)
    .maxHeight(70).translateX(-230).translateY(-200).build();
  slider.valueProperty().addListener(new ChangeListener() {
   @Override
   public void changed(ObservableValue arg0,
     Number arg1, Number arg2) {
    root.setRotationAxis(Rotate.X_AXIS);
    root.setRotate(slider.getValue());
   }
  });
 
  final Slider slider2 = SliderBuilder.create()
    .orientation(Orientation.VERTICAL).minWidth(50).minHeight(50)
    .maxHeight(70).translateX(-190).translateY(-200).build();
 
  slider2.valueProperty().addListener(new ChangeListener() {
   @Override
   public void changed(ObservableValue arg0,
     Number arg1, Number arg2) {
    root.setRotationAxis(Rotate.Y_AXIS);
    root.setRotate(slider2.getValue());
   }
  });
 
  mainPane.getChildren().add(root);
  mainPane.getChildren().addAll(slider, slider2);
  primaryStage.setResizable(true);
 }
 
 Color[] getColor() {
  Color[] colors = new Color[10];
  colors[0] = Color.ALICEBLUE;
  colors[1] = Color.RED;
  colors[2] = Color.YELLOW;
  colors[3] = Color.YELLOWGREEN;
  colors[4] = Color.ALICEBLUE;
  colors[5] = Color.AQUAMARINE;
  colors[6] = Color.BISQUE;
  colors[7] = Color.BLUEVIOLET;
  colors[8] = Color.BROWN;
  colors[9] = Color.BURLYWOOD;
  return colors;
 }
 
 class Xform extends Group {
  final Rotate rx = new Rotate(0, Rotate.X_AXIS);
  final Rotate ry = new Rotate(0, Rotate.Y_AXIS);
  final Rotate rz = new Rotate(0, Rotate.Z_AXIS);
 
  public Xform() {
   super();
   getTransforms().addAll(rz, ry, rx);
  }
 }
 
 @Override
 public void start(Stage primaryStage) throws Exception {
  init(primaryStage);
  primaryStage.show();
 }
 
 public static void main(String[] args) {
  launch(args);
 }
}

No comments: