< Java FX

JavaFX - Kontrollok kötése

Szerző: Sallai András

Copyright © 2025, Sallai András

Licenc: CC BY-SA 4.0

Web: https://szit.hu

Bevezetés

Az egyes kontrollok elérhetősége, láthatósága függővé tehető egy másik kontrollokhoz képest.

Gomb kötése kiválasztott listaelemhez

A törlésgombot csak akkor legyen aktív ha ki van választva listaelem.

@FXML private Button deleteButton; @FXML private ListView<String> list1; @FXML void initialize() { list1.getItems().add("Item 1"); list1.getItems().add("Item 2"); list1.getItems().add("Item 3"); deleteButton.disableProperty() .bind(list1.getSelectionModel() .selectedItemProperty().isNull()); }

Gomb kötése táblázat soraihoz

package com.example; import javafx.beans.binding.Bindings; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; public class MainController { @FXML private TableView<Employee> table; @FXML private TableColumn<Employee, Integer> idCol; @FXML private TableColumn<Employee, String> nameCol; @FXML private Button startButton; @FXML private void initialize() { idCol.setCellValueFactory(new PropertyValueFactory<>("id")); nameCol.setCellValueFactory(new PropertyValueFactory<>("name")); ObservableList<Employee> data = FXCollections.observableArrayList(); data.add(new Employee(1, "name1")); data.add(new Employee(2, "name2")); data.add(new Employee(3, "name3")); data.add(new Employee(4, "name4")); table.setItems(data); /* Tiltjuk a gombot ha nincs kiválasztva semmi vagy ha a name értéke name3 */ startButton.disableProperty() .bind(table.getSelectionModel() .selectedItemProperty().isNull() .or( Bindings.select( table.getSelectionModel() .selectedItemProperty(), "name") .isEqualTo("name3") ) ); } @FXML void onClickStartButton(ActionEvent event) { } }

TextField kötése rádiógomb csoporthoz

A TextField csak akkor legyen látható ha a radioButton1 van kiválsztva.

@FXML private RadioButton radioButton1; @FXML private ToggleGroup radioGroup1; @FXML private TextField textField1; //... textField1.visibleProperty().bind( Bindings.equal(radioGroup1.selectedToggleProperty(), radioButton1) );

Gomb kötése boolean változóhoz

import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.ListView; import javafx.scene.input.MouseButton; public class Controller { @FXML private Button addButton; @FXML private ListView<String> cityListView; // A szerkesztési mód állapotát reprezentáló BooleanProperty private BooleanProperty editMode = new SimpleBooleanProperty(false); @FXML public void initialize() { // Hozzáadás gomb tiltása, ha editMode igaz addButton.disableProperty().bind(editMode); // Dupla kattintás figyelése a cityListView-n cityListView.setOnMouseClicked(event -> { if (event.getButton().equals(MouseButton.PRIMARY) && event.getClickCount() == 2) { // Ha dupla kattintás történt, beállítjuk a szerkesztési módot true-ra editMode.set(true); System.out.println("Szerkesztés mód bekapcsolva."); } }); // Szerkesztés kikapcsolás példa // someSaveButton.setOnAction(event -> editMode.set(false)); } public void exitEditMode() { editMode.set(false); System.out.println("Szerkesztés mód kikapcsolva."); // Debug üzenet } }

Gomb változóhoz és listához

Szeretnénk az editMode változóhoz és a cityListView listához kötni a gomb engedélyezését.

Ha szerkesztőmódban vagyunk vagy a listában nincs kijelölve semmi, akkor nem engélyezzük a gombot.

deleteButton.disableProperty().bind(editMode .or(cityListView.getSelectionModel() .selectedItemProperty().isNull()));