Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:java:java_fx:parbeszedablak

< Java FX

JavaFX - Párbeszédablak

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