Mở một cửa sổ (window) mới trong JavaFX
1. Window trong JavaFX
Trong JavaFX để tạo ra một cửa sổ (window) bạn sử dụng lớp Stage (Sân khấu).
Có 3 loại thể thức (modelity) bạn có thể áp dụng cho Stage thông qua phương thức stage.initModality(Modelity).
- Modelity.NONE
- Modelity.WINDOW_MODAL
- Modelity.APPLICATION_MODAL
Khi tạo mới một Stage, bạn có thể thiết lập cửa sổ cha cho nó (Còn gọi là cửa sổ sở hữu nó), thông qua phương thức stage.initOwner(parentStage).
No | Modelity | Mô tả |
1 | Modelity.NONE | Khi bạn mở một cửa sổ mới với thể thức (modelity) này, cửa sổ mới sẽ độc lập với cửa sổ cha. Bạn có thể tương tác với cửa sổ cha, hoặc đóng cửa sổ cha mà không ảnh hưởng tới cửa sổ mới. |
2 | Modelity.WINDOW_MODAL | Khi bạn mở một cửa sổ mới với thể thức (modelity) này, cửa sổ mới khóa cửa sổ cha. Bạn không thể tương tác với cửa sổ cha, cho tới khi cửa sổ này bị đóng lại. |
3 | Modelity.APPLICATION_MODAL | Khi bạn mở một cửa sổ mới với thể thức (modelity) này, nó sẽ khóa mọi cửa sổ khác của ứng dụng. Bạn không thể tương tác với bất kỳ cửa sổ nào khác cho tới khi cửa sổ này bị đóng lại. |
2. Ví dụ, Mở một Modeless Window
Ví dụ, khi bạn nhấn vào một Button trên cửa sổ 1, nó sẽ mở ra một cửa sổ thứ 2 với thể thức (modelity) mặc định (Modeless Window / Modelity.NONE).
OpenNewModelessWindowExample.java
package org.o7planning.javafx.window;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class OpenNewModelessWindowExample extends Application {
@Override
public void start(final Stage primaryStage) {
Button button = new Button();
button.setText("Open a New Window");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Label secondLabel = new Label("I'm a Label on new Window");
StackPane secondaryLayout = new StackPane();
secondaryLayout.getChildren().add(secondLabel);
Scene secondScene = new Scene(secondaryLayout, 230, 100);
// Một cửa sổ mới (Stage)
Stage newWindow = new Stage();
newWindow.setTitle("Second Stage");
newWindow.setScene(secondScene);
// Sét đặt vị trí cho cửa sổ thứ 2.
// Có vị trí tương đối đối với cửa sổ chính.
newWindow.setX(primaryStage.getX() + 200);
newWindow.setY(primaryStage.getY() + 100);
newWindow.show();
}
});
StackPane root = new StackPane();
root.getChildren().add(button);
Scene scene = new Scene(root, 450, 250);
primaryStage.setTitle("JavaFX Open a new Window (o7planning.org)");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
3. Ví dụ, Mở một Modal Window
Ví dụ, khi bạn nhấn vào một Button trên cửa sổ 1, nó sẽ mở ra một cửa sổ mới với thể thức Modal Window (Modelity.WINDOW_MODAL). Khi cửa sổ mới còn hiển thị bạn không thể tương tác với cửa sổ cha.
OpenNewModelWindowExample.java
package org.o7planning.javafx.window;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
public class OpenNewModelWindowExample extends Application {
@Override
public void start(final Stage primaryStage) {
Button button = new Button();
button.setText("Open a New Window");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Label secondLabel = new Label("I'm a Label on new Window");
StackPane secondaryLayout = new StackPane();
secondaryLayout.getChildren().add(secondLabel);
Scene secondScene = new Scene(secondaryLayout, 230, 100);
// Một cửa sổ mới (Stage)
Stage newWindow = new Stage();
newWindow.setTitle("Second Stage");
newWindow.setScene(secondScene);
// Chỉ định modality (thể thức) cho cửa sổ mới.
newWindow.initModality(Modality.WINDOW_MODAL);
// Chỉ định chủ sở hữu (cửa sổ cha) của cửa sổ mới.
newWindow.initOwner(primaryStage);
// Sét đặt vị trí cho cửa sổ thứ 2.
// Có vị trí tương đối đối với cửa sổ chính.
newWindow.setX(primaryStage.getX() + 200);
newWindow.setY(primaryStage.getY() + 100);
newWindow.show();
}
});
StackPane root = new StackPane();
root.getChildren().add(button);
Scene scene = new Scene(root, 450, 250);
primaryStage.setTitle("JavaFX Open a new Window (o7planning.org)");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Các hướng dẫn lập trình JavaFX
- Mở một cửa sổ (window) mới trong JavaFX
- Hướng dẫn và ví dụ JavaFX ChoiceDialog
- Hướng dẫn và ví dụ JavaFX Alert Dialog
- Hướng dẫn và ví dụ JavaFX TextInputDialog
- Cài đặt e(fx)clipse cho Eclipse (Bộ công cụ lập trình JavaFX)
- Cài đặt JavaFX Scene Builder cho Eclipse
- Hướng dẫn lập trình JavaFX cho người mới bắt đầu - Hello JavaFX
- Hướng dẫn và ví dụ JavaFX FlowPane Layout
- Hướng dẫn và ví dụ JavaFX TilePane Layout
- Hướng dẫn và ví dụ JavaFX HBox, VBox Layout
- Hướng dẫn và ví dụ JavaFX BorderPane Layout
- Hướng dẫn và ví dụ JavaFX AnchorPane Layout
- Hướng dẫn và ví dụ JavaFX TitledPane
- Hướng dẫn và ví dụ JavaFX Accordion
- Hướng dẫn và ví dụ JavaFX ListView
- Hướng dẫn và ví dụ JavaFX Group
- Hướng dẫn và ví dụ JavaFX ComboBox
- Hướng dẫn sử dụng các phép biến hình (Transformations) trong JavaFX
- Các hiệu ứng (effects) trong JavaFX
- Hướng dẫn và ví dụ JavaFX GridPane Layout
- Hướng dẫn và ví dụ JavaFX StackPane Layout
- Hướng dẫn và ví dụ JavaFX ScrollPane
- Hướng dẫn và ví dụ JavaFX WebView và WebEngine
- Hướng dẫn và ví dụ JavaFX HTMLEditor
- Hướng dẫn và ví dụ JavaFX TableView
- Hướng dẫn và ví dụ JavaFX TreeView
- Hướng dẫn và ví dụ JavaFX TreeTableView
- Hướng dẫn và ví dụ JavaFX Menu
- Hướng dẫn và ví dụ JavaFX ContextMenu
- Hướng dẫn và ví dụ JavaFX Image và ImageView
- Hướng dẫn và ví dụ JavaFX Label
- Hướng dẫn và ví dụ JavaFX Hyperlink
- Hướng dẫn và ví dụ JavaFX Button
- Hướng dẫn và ví dụ JavaFX ToggleButton
- Hướng dẫn và ví dụ JavaFX RadioButton
- Hướng dẫn và ví dụ JavaFX MenuButton và SplitMenuButton
- Hướng dẫn và ví dụ JavaFX TextField
- Hướng dẫn và ví dụ JavaFX PasswordField
- Hướng dẫn và ví dụ JavaFX TextArea
- Hướng dẫn và ví dụ JavaFX Slider
- Hướng dẫn và ví dụ JavaFX Spinner
- Hướng dẫn và ví dụ JavaFX ProgressBar và ProgressIndicator
- Hướng dẫn và ví dụ JavaFX ChoiceBox
- Hướng dẫn và ví dụ JavaFX Tooltip
- Hướng dẫn và ví dụ JavaFX DatePicker
- Hướng dẫn và ví dụ JavaFX ColorPicker
- Hướng dẫn và ví dụ JavaFX FileChooser và DirectoryChooser
- Hướng dẫn và ví dụ JavaFX PieChart
- Hướng dẫn và ví dụ JavaFX AreaChart và StackedAreaChart
- Hướng dẫn và ví dụ JavaFX BarChart và StackedBarChart
- Hướng dẫn và ví dụ JavaFX Line
- Hướng dẫn và ví dụ JavaFX Rectangle và Ellipse
Show More