Tutorial JavaFX: Tata Letak Dasar

Terjemahan Tutorial JavaFX: Artikel tata letak dasar oleh Vojtech Ruzicka.

Cara mengatur dan meng-host komponen GUI dalam aplikasi JavaFX.

Ini adalah artikel keempat dalam seri JavaFX. Dalam artikel sebelumnya, saya menjelaskan cara menggunakan FXML dan SceneBuilder untuk membuat antarmuka pengguna Anda. Sekarang kita melihat tata letak.

Semua posting di seri JavaFX:

  1. Tutorial JavaFX: Memulai
  2. Tutorial JavaFX: Hello World!
  3. Tutorial JavaFX: FXML dan SceneBuilder
  4. Tutorial JavaFX: Tata Letak Dasar
  5. Tutorial JavaFX: Tata Letak Lanjutan
  6. JavaFX Tutorial: styling CSS
  7. JavaFX Weaver: Mengintegrasikan Aplikasi JavaFX dan Spring Boot

Tata letak


Layout adalah wadah untuk komponen. Tata letak berguna karena Anda dapat menempatkan wadah ini secara keseluruhan, apa pun komponen yang ada di dalamnya. Selain itu, setiap adegan hanya dapat berisi satu komponen, sehingga Anda memerlukan tata letak sebagai komponen root untuk adegan Anda sehingga Anda dapat menempatkan semua komponen yang diperlukan dari adegan tersebut. Tentu saja, satu tata letak biasanya tidak cukup, tetapi Anda dapat menempatkan satu tata letak di dalam yang lain.

Selain itu, tata letak juga mengatur dan menempatkan komponen Anda di dalamnya. Bergantung pada tata letak yang digunakan, komponen anak dapat ditemukan:

  • Satu per satu secara horizontal
  • Satu per satu secara vertikal
  • Ditumpuk di atas satu sama lain
  • Di dalam kotak

Ada banyak opsi lainnya. Yang penting adalah bahwa tata letak secara otomatis memperbarui posisi anak-anaknya ketika diubah ukurannya. Dengan demikian, Anda dapat memiliki tata letak yang konsisten, bahkan ketika pengguna mengubah ukuran jendela aplikasi.

HBox


Ini adalah salah satu mockup termudah yang tersedia. Ini hanya menempatkan semua objek secara horizontal dalam satu baris, satu demi satu, dari kiri ke kanan.



Di FXML, Anda dapat menggunakan HBox sebagai berikut:

<HBox> <Button>1</Button> <Button>2</Button> <Button>3</Button> <Button>4</Button> </HBox> 

Di Jawa, Anda dapat menggunakan kode ini:

 HBox hbox = new HBox(); Button btn1 = new Button("1"); Button btn2 = new Button("2"); Button btn3 = new Button("3"); Button btn4 = new Button("4"); hbox.getChildren().addAll(btn1, btn2, btn3, btn4); 

Jarak


Elemen kami sekarang tersusun rapi secara berurutan, satu demi satu:



Namun, opsi ini tidak terlalu baik, karena elemen-elemennya diatur satu demi satu tanpa celah. Untungnya, kita dapat menentukan jarak antar komponen menggunakan properti jarak HBacing:

 <HBox spacing="10"> ... </HBox> 

Atau di Jawa menggunakan setSpacing () :

 HBox hbox = new HBox(); hbox.setSpacing(10); 

Padding


Elemen sekarang diposisikan dengan benar, namun, masih belum ada lekukan antara elemen dan HBox itu sendiri. Mungkin bermanfaat untuk menambahkan bantalan ke HBox kami:



Anda dapat menentukan setiap area yang akan diisi secara terpisah - atas, bawah, kiri dan kanan.

 <HBox> <padding> <Insets top="10" bottom="10" left="10" right="10"/> </padding> ... </HBox> 

Hal yang sama dapat dilakukan di Jawa:

 HBox hbox = new HBox(); hbox.setPadding(new Insets(10, 10, 10, 10)); 

Vbox


VBox sangat mirip dengan HBox, tetapi alih-alih menampilkan komponen internal secara horizontal satu demi satu, VBox menampilkannya secara vertikal dalam sebuah kolom:



Anda masih dapat mengatur properti spacing dan padding dengan cara yang sama seperti di HBox.

Kode VBox digunakan dengan cara yang persis sama dengan HBox, hanya namanya yang berbeda:

 <VBox spacing="10"> <padding> <Insets top="10" bottom="10" left="10" right="10"/> </padding> <Button>1</Button> <Button>2</Button> <Button>3</Button> <Button>4</Button> </VBox> 

Dan di Jawa:

 VBox vbox = new VBox(); vbox.setPadding(new Insets(10, 10, 10, 10)); vbox.setSpacing(10); Button btn1 = new Button("1"); Button btn2 = new Button("2"); Button btn3 = new Button("3"); Button btn4 = new Button("4"); vbox.getChildren().addAll(btn1, btn2, btn3, btn4); 

Tumpukan


Tata letak ini berguna untuk menempatkan komponennya di atas satu sama lain. Urutan penyisipan menentukan urutan elemen. Ini berarti bahwa elemen pertama ada di bawah, yang berikutnya ada di atas, dan seterusnya.

Ini dapat bermanfaat, misalnya, untuk menampilkan gambar dalam tata letak dan menampilkan beberapa teks atau tombol di atasnya.



Contoh berikut menggunakan StackPane di FXML:

 <StackPane> <ImageView> <Image url="/image.jpg"/> </ImageView> <Button>Click Me!</Button> </StackPane> 

Contoh yang sama di Jawa:

 StackPane stackPane = new StackPane(); Image image = new Image(getClass().getResourceAsStream("/image.jpg")); ImageView imageView = new ImageView(image); Button btn = new Button("Click Me!"); stackPane.getChildren().addAll(imageView, btn); 

Sejajarkan Elemen


Anda dapat mengatur perataan elemen pada tumpukan untuk mengatur pengaturannya dengan lebih baik:

 <StackPane alignment="BOTTOM_CENTER"> ... </StackPane> 

Tentu saja Anda dapat melakukan hal yang sama di Jawa:

 StackPane stackPane = new StackPane(); stackPane.setAlignment(Pos.BOTTOM_CENTER); 

Margin


Jika Anda ingin lebih mengontrol pengaturan elemen lebih detail, Anda dapat mengatur margin untuk masing-masing elemen pada stack:

 <StackPane alignment="BOTTOM_CENTER"> <ImageView> <Image url="/image.jpg"/> </ImageView> <Button> <StackPane.margin> <Insets bottom="10"/> </StackPane.margin> Click Me! </Button> </StackPane> 

Atau di Jawa:

 StackPane stackPane = new StackPane(); Button btn = new Button("Click Me!"); stackPane.getChildren().add(btn); StackPane.setMargin(btn, new Insets(0,0,10,0)); 

Flowpan


Panel Flow dapat bekerja dalam dua mode - horizontal (default) atau vertikal.

Dalam mode horizontal, item ditampilkan secara horizontal, satu demi satu, seperti pada HBox. Perbedaannya adalah bahwa ketika tidak ada lagi ruang horisontal, itu ditransfer ke baris berikutnya di bawah yang pertama dan berlanjut lagi. Dengan demikian, ada banyak garis, dan bukan hanya satu, seperti pada HBox.

Mode vertikal sangat mirip, tetapi (seperti VBox) ini menampilkan elemen secara vertikal, dari atas ke bawah. Ketika tidak ada lagi ruang, dia menambahkan kolom lain dan melanjutkan.

Gambar berikut menggambarkan dua mode ini:



Perhatikan bahwa elemen tidak harus memiliki ukuran yang sama seperti pada gambar di atas.

Perhatikan bagaimana posisi komponen dihitung ulang jika Anda mengubah ukuran wadah:



Anda dapat mengatur pengisian internal tata letak ini dengan cara yang sama seperti untuk HBox dan VBox. Namun, penggunaan properti spacing sedikit berbeda. Alih-alih properti tunggal untuk spasi, Anda harus memiliki properti spasi horisontal dan vertikal yang terpisah, karena elemen dapat ditampilkan dalam beberapa baris / kolom. Gunakan hgap untuk properti spasi horizontal dan vgap untuk properti vertikal.

 FlowPane flowPane = new FlowPane(); flowPane.setOrientation(Orientation.VERTICAL); flowPane.setVgap(10); flowPane.setHgap(10); flowPane.getChildren().addAll(...); 

Contoh FlowPane di FXML:

 <FlowPane hgap="10" vgap="10" orientation="VERTICAL"> ... </FlowPane> 

Tilepan


Layout ini sangat mirip dengan FlowPane. Cara menampilkan komponen hampir identik. Anda masih dapat menggunakan mode horizontal atau vertikal dan menentukan vgap dan hgap .

Satu perbedaan penting adalah ukuran sel. FlowPane hanya memberikan ruang yang dibutuhkan untuk setiap komponen. TilePane, di sisi lain, membuat ukuran semua sel sama tergantung pada elemen terbesar. Dengan demikian, semua kontrol selaras dengan baik dalam baris / kolom.



Pada gambar di atas, komponen yang sama ditempatkan dengan cara yang sama, tetapi Anda dapat dengan mudah melihat perbedaannya.

Tempat FlowPane mengontrol satu demi satu, tanpa interval tambahan
TilePane menempatkan kontrol dalam sel dengan ukuran yang sama berdasarkan elemen terbesar.

Penciptaan TilePane tidak berbeda dengan FlowPane, kecuali untuk namanya.

 <TilePane vgap="10" hgap="10" orientation="VERTICAL" > 

Hal yang sama di Jawa:

 TilePane tilePane = new TilePane(); tilePane.setVgap(10); tilePane.setHgap(10); tilePane.setOrientation(Orientation.VERTICAL); 

Apa selanjutnya


Artikel ini meneliti penggunaan beberapa tata letak dasar untuk menempatkan komponen dalam aplikasi JavaFX. Bahkan, JavaFX memiliki pilihan tata letak yang jauh lebih beragam. Opsi tata letak lanjutan akan dibahas di artikel selanjutnya.

Source: https://habr.com/ru/post/id475882/


All Articles