在JavaFX中,要知道TableView动态创建按钮的行,可以通过以下步骤实现:
下面是一个示例代码,演示如何在JavaFX中实现动态创建按钮的行:
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
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.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;
public class TableViewExample extends Application {
public static class Person {
private final SimpleStringProperty name;
private final SimpleStringProperty action;
public Person(String name, String action) {
this.name = new SimpleStringProperty(name);
this.action = new SimpleStringProperty(action);
}
public String getName() {
return name.get();
}
public void setName(String name) {
this.name.set(name);
}
public String getAction() {
return action.get();
}
public void setAction(String action) {
this.action.set(action);
}
}
@Override
public void start(Stage primaryStage) {
TableView<Person> tableView = new TableView<>();
ObservableList<Person> data = FXCollections.observableArrayList(
new Person("John", "Edit"),
new Person("Jane", "Delete"),
new Person("Bob", "Save")
);
TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<Person, String> param) {
return param.getValue().name;
}
});
TableColumn<Person, String> actionColumn = new TableColumn<>("Action");
actionColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<Person, String> param) {
return param.getValue().action;
}
});
Callback<TableColumn<Person, String>, TableCell<Person, String>> cellFactory = new Callback<TableColumn<Person, String>, TableCell<Person, String>>() {
@Override
public TableCell<Person, String> call(TableColumn<Person, String> param) {
final TableCell<Person, String> cell = new TableCell<Person, String>() {
final Button button = new Button();
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
button.setText(item);
setGraphic(button);
}
}
};
cell.getStylesheets().add(getClass().getResource("button-cell.css").toExternalForm());
return cell;
}
};
actionColumn.setCellFactory(cellFactory);
tableView.getColumns().addAll(nameColumn, actionColumn);
tableView.setItems(data);
VBox vbox = new VBox(tableView);
Scene scene = new Scene(vbox);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
在上述示例代码中,我们创建了一个TableView对象,其中包含两列:Name和Action。Name列显示人名,Action列显示按钮。我们使用Callback对象来自定义Action列的单元格显示和编辑,通过updateItem方法来更新单元格的内容。在updateItem方法中,我们创建了一个按钮,并根据数据模型设置按钮的文本。然后,我们将按钮设置为单元格的图形。最后,我们将Callback对象设置为Action列的CellFactory,以便在每个单元格中显示按钮。
请注意,示例代码中的CSS文件"button-cell.css"用于设置按钮的样式,你可以根据需要自定义按钮的外观。
这是一个简单的示例,演示了如何在JavaFX中实现动态创建按钮的行。你可以根据实际需求进行修改和扩展。
领取专属 10元无门槛券
手把手带您无忧上云