لقد فهمت ما تحاول تحقيقه. تريد إنشاء واجهة مستخدم تحتوي على قائمة من الأزرار داخل جدول JavaFX TableView. هذا يمكن أن يتحقق بسهولة باستخدام خلية مخصصة في الجدول. فيما يلي مثال على كيفية القيام بذلك:
javaimport javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
public class TableViewWithButton extends Application {
private final ObservableList data = FXCollections.observableArrayList(
new Person("John"),
new Person("Jane"),
new Person("Doe"),
new Person("Smith")
);
@Override
public void start(Stage stage) {
TableView tableView = new TableView<>();
TableColumn nameCol = new TableColumn<>("Name");
nameCol.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
nameCol.setCellFactory(col -> new TableCell<>() {
private final Button button = new Button("Click me");
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
setGraphic(button);
}
}
});
tableView.setItems(data);
tableView.getColumns().add(nameCol);
Scene scene = new Scene(tableView, 300, 200);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
public static class Person {
private final StringProperty name;
public Person(String name) {
this.name = new SimpleStringProperty(name);
}
public StringProperty nameProperty() {
return name;
}
public String getName() {
return name.get();
}
public void setName(String name) {
this.name.set(name);
}
}
}
في هذا المثال، يتم إنشاء جدول (TableView
) يحتوي على عمود واحد فقط (TableColumn
) لعرض أسماء الأشخاص. تم استخدام خلية مخصصة (TableCell
) لتحويل القيمة في العمود إلى زر. تظهر الخلية زرًا بدلاً من القيمة النصية للعمود، والزر يحتوي على عنوان “Click me”.
المزيد من المعلومات
بالتأكيد! في هذا المثال، تم استخدام الكلاس Person
كنموذج للبيانات، حيث يحتوي على خاصية name
من نوع StringProperty
التي تمثل اسم الشخص. تم إنشاء جدول TableView
لعرض قائمة من الأشخاص باستخدام بيانات مزودة بشكل قابل للمشاهدة (ObservableList
). تم إنشاء عمود (TableColumn
) بعنوان “Name” لعرض أسماء الأشخاص، وتم تعيين خاصية القيمة (CellValueFactory
) لاسترجاع قيمة الاسم من كل صف في الجدول. تم استخدام خلية مخصصة (TableCell
) لتحويل القيمة إلى زر، حيث يتم عرض زر “Click me” بدلاً من القيمة النصية للعمود.
يمكنك تعديل هذا المثال لتناسب احتياجاتك، مثل استخدام بيانات قاعدة البيانات لملء الجدول بدلاً من البيانات الثابتة كما في المثال، وتخصيص المزيد من الأعمدة والخصائص للزر والخلية حسب متطلبات تطبيقك.