我对JavaFX的新手。 任何人都可以帮我加上的TableView头部分的TextField。 我尝试与它上面stackpane和地方文本框放的TableView,与CSS集成的帮助。 无法成功。
Answer 1:
是的,你可以做到这一点。
为JavaFX 2.2
在JavaFX 2.2(jdk7u6 +)JIRA RT-14909被实现,它允许你上的列设置的图形(任意节点)来指定该列的表头。
TableColumn col = new TableColumn("");
TextField colHeaderTextField = new TextField("Pink Elephants");
col.setGraphic(colHeaderTextField);
为JavaFX 2.0和2.1
已添加的表之后到活动场景,并且已经渲染,可以查找表头标签,并更改为显示图形(其可以是任何种类的节点),其显示文本框的表头,而不是默认静态标签文本。
下面是一个例子:
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class TableWithTextHeaders extends Application {
public static void main(String[] args) { launch(args); }
@Override public void start(Stage stage) {
TableColumn firstNameCol = new TableColumn("First Name");
firstNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("firstName"));
TableColumn lastNameCol = new TableColumn("Last Name");
lastNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("lastName"));
TableView table = new TableView();
table.getColumns().addAll(firstNameCol, lastNameCol);
table.setItems(FXCollections.observableArrayList(
new Person("Jacob", "Smith"),
new Person("Isabella", "Johnson"),
new Person("Ethan", "Williams")
));
table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
StackPane layout = new StackPane();
layout.setStyle("-fx-padding: 10;");
layout.getChildren().add(table);
Scene scene = new Scene(layout);
stage.setScene(scene);
stage.show();
for (Node n: table.lookupAll(".column-header > .label")) {
if (n instanceof Label) {
Label label = (Label) n;
TextField textField = new TextField(label.getText());
label.textProperty().bind(textField.textProperty());
label.setGraphic(textField);
label.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
}
}
}
public static class Person {
private final SimpleStringProperty firstName;
private final SimpleStringProperty lastName;
private Person(String fName, String lName) {
this.firstName = new SimpleStringProperty(fName);
this.lastName = new SimpleStringProperty(lName);
}
public String getFirstName() { return firstName.get(); }
public void setFirstName(String fName) { firstName.set(fName); }
public String getLastName() { return lastName.get(); }
public void setLastName(String fName) { lastName.set(fName); }
}
}
文章来源: Can I place TextField on TableView header-column on javafx 2