oktatas:programozas:java:java_fx:parbeszedablak
Tartalomjegyzék
JavaFX - Párbeszédablak
- Szerző: Sallai András
- Copyright © 2023, Sallai András
- Szerkesztve: 2023, 2025
- Web: https://szit.hu
Gyermekablak létrehozása
A következő egy hozzáadásablak alapját szolgáltatja.
- AddStage
package views.add; import javafx.scene.Scene; import javafx.stage.Modality; import javafx.stage.Stage; public class AddStage extends Stage { public AddStage() { this.setTitle("Hozzáadás"); this.initModality(Modality.APPLICATION_MODAL); AddPanel addPanel = new AddPanel(); Scene scene = new Scene(addPanel, 300, 200); this.setScene(scene); } }
Az AddPanel-en találhatók a további kontrollok.
Modális ablak beállítása
this.initModality(Modality.APPLICATION_MODAL);
Ablak bezárása
Stage stage = (Stage) addPanel.getScene().getWindow(); stage.close();
A showAndWait()
A show() utáni utasítások az ablak megjelenítésétől függetlenül lefutnak.
System.out.println("Hozzáadás..."); addView.show(); System.out.println("Az adatok újrakérése"); mainView.getTablePanel().getProducts();
Ha a showAndWait() metódust használjuk, az ezt követő metódusok megvárják az ablak bezárását.
System.out.println("Hozzáadás..."); addView.showAndWait(); System.out.println("Az adatok újrakérése"); mainView.getTablePanel().getProducts();
A Dialog osztály
- src/TestDialog.java
import javafx.scene.control.ButtonType; import javafx.scene.control.Dialog; import javafx.scene.control.ButtonBar.ButtonData; public class TestDialog extends Dialog<String> { public TestDialog() { this.setTitle("Teszt"); ButtonType type = new ButtonType("Ok", ButtonData.OK_DONE); this.getDialogPane().getButtonTypes().add(type); this.setContentText("Teszt"); } }
A <String> a visszatérési érték típusa.
Megjelenítés:
new TestDialog().show();
Dokumentáció:
Kontrollok tartalomként
- src/TestDialog.java
import javafx.scene.control.ButtonType; import javafx.scene.control.Dialog; import javafx.scene.control.ButtonBar.ButtonData; public class TestDialog extends Dialog<String> { public TestDialog() { this.setTitle("Teszt"); ButtonType type = new ButtonType("Mentés", ButtonData.OK_DONE); this.getDialogPane().getButtonTypes().add(type); this.getDialogPane().setContent(new AddView()); } }
- src/AddView.java
import javafx.scene.layout.VBox; import views.InputPanel; public class AddView extends VBox { InputPanel nameInput; InputPanel actnumberInput; public AddView() { this.initComponent(); this.addComponent(); } private void initComponent() { this.nameInput = new InputPanel("Név"); this.actnumberInput = new InputPanel("Cikkszám"); } private void addComponent() { this.getChildren().add(this.nameInput); this.getChildren().add(this.actnumberInput); } }
- InputPanel.java
package views; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.HBox; public class InputPanel extends HBox { Label label; TextField field; public InputPanel() { this.initComponent(); this.addComponent(); } public InputPanel(String text) { this.initComponent(); this.addComponent(); this.label.setText(text); } private void initComponent() { this.label = new Label(); this.field = new TextField(); this.label.setMinWidth(100); } private void addComponent() { this.getChildren().add(this.label); this.getChildren().add(this.field); } }
Futtatás:
new TestDialog().show();
Kép
dialog.setGraphic(new ImageView(this.getClass().getResource("kepnev.png").toString()));
Alert
Törlést megerősítő metódus:
private boolean confirmDelete() { Alert alert = new Alert(AlertType.CONFIRMATION ); alert.setTitle("Törlés"); alert.setHeaderText("Törlés"); alert.setContentText("Biztosan törlöd?"); alert.showAndWait(); if (alert.getResult() == ButtonType.OK) return true; else return false; }
Középre igazítás
A lényeg:
alert.initOwner(App._stage);
Tegyük fel, hogy VSCode bővímtménnyel hoztuk létre a projektet, ahol van egy App.java fájl, meg egy MainController.java fájl.
- App.java
//... public static Stage _stage; @Override public void start(Stage stage) throws IOException { _stage = stage; scene = new Scene(loadFXML("primary"), 640, 480); stage.setScene(scene); stage.show(); } //...
- MainController.java
//... Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("Információ"); alert.setHeaderText("Nézze meg az információt"); alert.setContentText("Üzenet"); alert.initOwner(App._stage); alert.showAndWait(); //...
Megerősítés
import javafx.scene.control.ButtonType; //... Alert alert = new Alert(Alert.AlertType.CONFIRMATION); Optional<ButtonType> result = alert.showAndWait(); if (result.get() == ButtonType.OK) { System.out.println("OK"); } if(result.get() == ButtonType.CANCEL) { System.out.println("CANCEL"); }
Saját gombok
import java.util.Optional; import javafx.scene.control.Alert; import javafx.scene.control.ButtonType; //... Alert alert = new Alert(Alert.AlertType.CONFIRMATION); ButtonType yesButton = new ButtonType("Igen"); ButtonType noButton = new ButtonType("Nem"); alert.getButtonTypes().setAll(yesButton, noButton); Optional<ButtonType> result = alert.showAndWait(); if (result.get() == yesButton) { System.out.println("igen"); } if(result.get() == noButton) { System.out.println("nem"); }
Ikon helyett saját kép
Egy 50×50-s képet megjelenítése.
Alert alert = new Alert(Alert.AlertType.INFORMATION); Image image = new Image(getClass() .getResourceAsStream("kep.png")); ImageView imageView = new ImageView(image); imageView.setFitWidth(50); imageView.setFitHeight(50); alert.setTitle("Üdvözlő kép"); alert.setHeaderText("Helló"); alert.getDialogPane().setGraphic(imageView); alert.show();
ChoiceDialog
import java.util.Optional; import javafx.scene.control.ChoiceDialog; //... ChoiceDialog<String> dialog = new ChoiceDialog<>("Java", "Java", "C++", "C#"); dialog.setTitle("Válassz nyelvet"); dialog.setHeaderText("Válassz nyelvet"); Optional<String> result = dialog.showAndWait(); result.ifPresent(System.out::println); //vagy: String selected = result.orElse(null); System.out.println(selected);
A ChoiceDialog<>() konstruktorában az első paraméter az alapértelmezett érték, esetünkben ez a Java:
new ChoiceDialog<>("Java", "Java", "C++", "C#");
Az orElse() alapértelmezetten sztring adható meg:
String selected = result.orElse("Nincs kiválasztva"); System.out.println(selected);
Fájlválasztás
- javafx.stage.FileChooser
FileChooser chooser = new FileChooser(); chooser.setTitle("Fájl kiválasztása"); chooser.showOpenDialog(App._stage);
FileChooser fileChooser = new FileChooser(); fileChooser.setTitle("Open Resource File"); fileChooser.getExtensionFilters().addAll( new ExtensionFilter("Szöveges fájlok", "*.txt", "*.csv", "*.gif"), new ExtensionFilter("JSON fájlok", "*.json"), new ExtensionFilter("Minden fájl", "*.*")); File selectedFile = fileChooser.showOpenDialog(mainStage); if (selectedFile != null) { mainStage.display(selectedFile); }
Kezdőkönyvtár beállítása:
fileChooser.setInitialDirectory(new File("e:\\"));
Könyvtárválasztás
- javafx.stage.DirectoryChooser
DirectoryChooser chooser = new DirectoryChooser(); chooser.setTitle("Könyvtár választása"); chooser.showDialog(App._stage);
DirectoryChooser directoryChooser = new DirectoryChooser(); directoryChooser.setInitialDirectory(new File("valami")); Button button = new Button("Könyvtárválasztása"); button.setOnAction(e -> { File selectedDirectory = directoryChooser.showDialog(primaryStage); System.out.println(selectedDirectory.getAbsolutePath()); });
oktatas/programozas/java/java_fx/parbeszedablak.txt · Utolsó módosítás: 2025/05/21 16:04 szerkesztette: admin