[[oktatas:programozás:java:java_fx|< Java FX]]
====== JavaFX - Kontrollok kötése ======
* **Szerző:** Sallai András
* Copyright (c) 2025, Sallai András
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|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 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 table;
@FXML
private TableColumn idCol;
@FXML
private TableColumn nameCol;
@FXML
private Button startButton;
@FXML
private void initialize() {
idCol.setCellValueFactory(new PropertyValueFactory<>("id"));
nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));
ObservableList 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 boolan 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 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()));