Truyền dữ liệu qua mỗi Scene trong JavaFX
Lập trình JavaFX Cơ bản
Danh sách bài học
Truyền dữ liệu qua mỗi Scene trong JavaFX
Dẫn nhập
JavaFX là một công nghệ phát triển giao diện máy tính trên nền tảng Java nhằm thay thế công nghệ cũ Java Swing, Java AWT với những cấu trúc và cách viết dễ sử dụng, thân thiện với lập trình viên nhiều hơn
Qua khoá học JavaFX Cơ bản, Kteam sẽ cung cấp những kiến thức lập trình cơ bản về thiết kế giao diện phần mềm, giúp các bạn có thể tạo ra những phần mềm phục vụ cho học tập và công việc.
Nội dung
Nội dung bao gồm Source code & các lưu ý chính về quá trình thực hiện phần mềm. Kteam khuyến khích bạn cập nhập thêm nhiều kinh nghiệm cũng như hiểu chi tiết hơn về các kỹ thuật được đề cập trong bài học thông qua các video đính kèm.
Kiến thức cần nắm để học serial này:
- Java Cơ bản.
- Java Hướng đối tượng.
Project tham khảo
Controller.java
package sample.Main22;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
public class Controller implements Initializable {
@FXML
private TableView<Student> table;
@FXML
private TableColumn<Student, Integer> idColumn;
@FXML
private TableColumn<Student, String> nameColumn;
@FXML
private TableColumn<Student, String> emailColumn;
@FXML
private TableColumn<Student, Integer> ageColumn;
private ObservableList<Student> studentList;
@FXML
private TextField idText;
@FXML
private TextField nameText;
@FXML
private TextField emailText;
@FXML
private TextField ageText;
@FXML
private AnchorPane ap;
@Override
public void initialize(URL location, ResourceBundle resources) {
studentList = FXCollections.observableArrayList(
new Student(1, "Chau", "chau@gmail.com", 21),
new Student(2, "Chuong", "chuong@gmail.com", 20)
);
idColumn.setCellValueFactory(new PropertyValueFactory<Student, Integer>("id"));
nameColumn.setCellValueFactory(new PropertyValueFactory<Student, String>("name"));
emailColumn.setCellValueFactory(new PropertyValueFactory<Student, String>("email"));
ageColumn.setCellValueFactory(new PropertyValueFactory<Student, Integer>("age"));
table.setItems(studentList);
}
public void add (ActionEvent e){
Student newStudent = new Student();
newStudent.setId(Integer.parseInt(idText.getText()));
newStudent.setName(nameText.getText());
newStudent.setEmail(emailText.getText());
newStudent.setAge(Integer.parseInt(ageText.getText()));
studentList.add(newStudent);
}
public void delete (ActionEvent e){
Student selected = table.getSelectionModel().getSelectedItem();
studentList.remove(selected);
}
public void changeSceneStudentDetail(ActionEvent e) throws IOException {
Stage stage = (Stage)((Node) e.getSource()).getScene().getWindow();
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("StudentDetail.fxml"));
Parent studentViewParent = loader.load();
Scene scene = new Scene(studentViewParent);
StudentDetailController controller = loader.getController();
Student selected = table.getSelectionModel().getSelectedItem();
controller.setStudent(selected);
stage.setScene(scene);
}
}
Main22.java
package sample.Main22;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main22 extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
try{
Parent root = FXMLLoader.load(this.getClass().getResource("sample.fxml"));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}catch (Exception e){
System.out.println(e);
}
}
}
Student.java
package sample.Main22;
public class Student {
private int id;
private String name;
private String email;
private int age;
public Student(int id, String name, String email, int age) {
this.id = id;
this.name = name;
this.email = email;
this.age = age;
}
public Student() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
StudentDetail.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Main22.StudentDetailController">
<children>
<Label layoutX="210.0" layoutY="35.0" prefHeight="43.0" prefWidth="156.0" text="Student Detail">
<font>
<Font size="24.0" />
</font>
</Label>
<Label layoutX="78.0" layoutY="113.0" prefHeight="32.0" prefWidth="59.0" text="ID" />
<Label layoutX="78.0" layoutY="179.0" prefHeight="21.0" prefWidth="47.0" text="Name" />
<Label layoutX="250.0" layoutY="119.0" prefHeight="21.0" prefWidth="38.0" text="Email" />
<Label layoutX="252.0" layoutY="179.0" text="Age" />
<Label fx:id="ageLabel" layoutX="317.0" layoutY="179.0" text="Age" />
<Label fx:id="emailLabel" layoutX="311.0" layoutY="120.0" prefHeight="21.0" prefWidth="85.0" text="Email" />
<Label fx:id="nameLabel" layoutX="137.0" layoutY="179.0" prefHeight="21.0" prefWidth="47.0" text="Name" />
<Label fx:id="idLabel" layoutX="137.0" layoutY="114.0" prefHeight="32.0" prefWidth="59.0" text="ID" />
<Button layoutX="334.0" layoutY="261.0" mnemonicParsing="false" onAction="#goBack" text="Back" />
</children>
</AnchorPane>
StudentDetailController.java
package sample.Main22;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import java.io.IOException;
public class StudentDetailController {
@FXML
Label idLabel;
@FXML
Label nameLabel;
@FXML
Label emailLabel;
@FXML
Label ageLabel;
public void setStudent(Student student){
idLabel.setText(String.valueOf(student.getId()));
nameLabel.setText(student.getName());
emailLabel.setText(student.getEmail());
ageLabel.setText(String.valueOf(student.getAge()));
}
public void goBack(ActionEvent e) throws IOException {
Stage stage = (Stage)((Node) e.getSource()).getScene().getWindow();
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("sample.fxml"));
Parent sampleParent = loader.load();
Scene scene = new Scene(sampleParent);
stage.setScene(scene);
}
}
sample.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="552.0" prefWidth="786.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Main22.Controller">
<children>
<TableView fx:id="table" layoutX="21.0" layoutY="23.0" prefHeight="470.0" prefWidth="519.0">
<columns>
<TableColumn fx:id="idColumn" prefWidth="75.0" text="ID" />
<TableColumn fx:id="nameColumn" prefWidth="154.0" text="Name" />
<TableColumn fx:id="emailColumn" prefWidth="161.0" text="Email" />
<TableColumn fx:id="ageColumn" minWidth="0.0" prefWidth="128.0" text="Age" />
</columns>
</TableView>
<Label layoutX="560.0" layoutY="72.0" text="ID" />
<Label layoutX="560.0" layoutY="128.0" text="Name" />
<Label layoutX="560.0" layoutY="182.0" text="Email" />
<Label layoutX="560.0" layoutY="237.0" text="Age" />
<TextField fx:id="idText" layoutX="609.0" layoutY="67.0" prefHeight="31.0" prefWidth="176.0" />
<TextField fx:id="nameText" layoutX="609.0" layoutY="123.0" prefHeight="31.0" prefWidth="176.0" />
<TextField fx:id="emailText" layoutX="609.0" layoutY="177.0" prefHeight="31.0" prefWidth="176.0" />
<TextField fx:id="ageText" layoutX="609.0" layoutY="232.0" prefHeight="31.0" prefWidth="176.0" />
<Button layoutX="572.0" layoutY="320.0" mnemonicParsing="false" onAction="#add" text="Add" />
<Button layoutX="634.0" layoutY="320.0" mnemonicParsing="false" onAction="#delete" text="Delete" />
<Button layoutX="707.0" layoutY="320.0" mnemonicParsing="false" onAction="#changeSceneStudentDetail" text="Detail" />
</children>
</AnchorPane>
Tải Project
Nếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới!
Kết
Trong bài này, chúng ta đã tìm hiểu về TableView trong JavaFX và kết thúc hoàn chỉnh khóa học LẬP TRÌNH JAVAFX
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng
- Cộng đồng Hỏi đáp: https://www.Howkteam.vn/Questions
- Cộng đồng trao đổi kiến thức Facebook: http://www.Group.Howkteam.com
Đừng quên Like Facebook hoặc +1 Google cho bài học mà bạn yêu thích!
Bạn cũng có thể mời tác giả khóa học một ly cafe hoặc Tài trợ cho các khóa học khác, giúp ai cũng có cơ hội tiếp cận GIÁO DỤC MIỄN PHÍ qua link bên dưới!
Cảm ơn các bạn đã luôn đồng hành cùng Kteam. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử Thách – Không ngại khó”
Tải xuống
Tài liệu
Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Truyền dữ liệu qua mỗi Scene trong JavaFX dưới dạng file PDF trong link bên dưới.
Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com
Đừng quên like và share để ủng hộ Kteam và tác giả nhé!
Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
Nội dung bài viết
Tác giả/Dịch giả
Khóa học
Lập trình JavaFX Cơ bản
Đánh giá
Nội dung rất hay, có điều anh nên khắc phục nhược điểm của mình. Em nói nghiêm túc và chân thành muốn anh giỏi hơn. Thank for reading!
Nếu thay tableview bằng listview thì có làm được như bài học ko ad
thật sự rất hữu ích. cảm ơn anh(bạn) nhiều