Saya baru saja mulai bermain-main dengan Java FX dan sangat menyukainya. Saya belum membaca buku atau tutorial mendalam tentang hal ini, jadi pertanyaan ini mungkin sangat mudah dijawab.
Saya ingin memperbesar ImageView dan menunjukkan kepada pengguna wilayah tertentu dari Gambar jika dia mengeklik area tertentu pada gambar. Untuk lebih jelasnya perhatikan Gambar berikut:
(jika gambar terlalu kecil, ini versi yang lebih besar)
(A) menampilkan gambar lengkap yang saya gunakan (world-map.jpg, ukuran: 4.000px X 3.000px)
(1) menunjukkan Tahap yang saya tunjukkan kepada pengguna. Saya melakukan beberapa penskalaan awal dan terjemahan pada objek ImageView agar tampilan lebih terpusat pada Eropa dan Afrika. Wilayah yang ditandai adalah Elemen tambahan dengan Event handler terlampir (tidak ada dalam kode saya)
(2) menunjukkan hasil yang saya dapatkan setelah melakukan ParallelTransition
(3) menunjukkan hasil yang ingin dapatkan
Apa yang terjadi ketika saya melakukan ParallelTransition adalah ImageView diperbesar dengan benar tetapi juga diterjemahkan ke sudut kanan bawah Gambar. Apa kesalahan yang telah aku perbuat?
Ini kode Aplikasi JavaFX saya:
@Override
public void start(final Stage stage)
{
// our root group
final Group g = new Group();
// load image
ImageView im = new ImageView();
// using a helper method to load external resource
Image img = FileUtils.loadImage(R.imageWorldMap);
im.setImage(img);
g.getChildren().add(im);
// translate to center view on europe and africa
Translate t = new Translate();
t.setX(-300);
t.setY(-200);
im.getTransforms().add(t);
// zoom out because source image is huge
Scale scale = new Scale();
scale.setX(.3);
scale.setY(.3);
im.getTransforms().add(scale);
// create scene and show stage
final Scene s = new Scene(g, 640, 480);
stage.setScene(s);
stage.show();
// code below is normally inside an event handler
// but for simplicity reason and testing its like that now
// move europe to the center
TranslateTransition translateTransition =
new TranslateTransition(Duration.millis(2000), im);
translateTransition.setToX(1100); // 3300
translateTransition.setToY(900); // 2700
// scale in europe
ScaleTransition scaleTransition =
new ScaleTransition(Duration.millis(2000), im);
scaleTransition.setToX(3f);
scaleTransition.setToY(3f);
// create parallel translation
ParallelTransition parallelTransition = new ParallelTransition();
parallelTransition.getChildren().addAll(
scaleTransition
, translateTransition
);
parallelTransition.play();
}
Saya bermain-main sedikit dengan koordinat untuk mendapatkan hasil yang lebih baik, dan memang demikian, tetapi saya ingin memahami cara menyelesaikan tugas ini secara pragmatis.
Sebagai pertanyaan tambahan, dapatkah Anda merekomendasikan (berdasarkan pengalaman Anda) buku untuk Java FX 8.
Teknologi yang saya gunakan: Win7, Java8, JavaFX8