我想用一个用于标题文本定位的自定义css来更改默认行为.但是,必须能够更改各个列的位置.
然而,它并不起作用.
我的新默认值.它应该向左对齐而不是中间对齐. 这也适用于以下css.
/*Css*/
.table-view .column-header .label{
-fx-alignment:CENTER_LEFT;
-fx-padding: 2 0 2 10;
}
但是,我希望能够为各个列覆盖此行为.例如,列标题居中或向右对齐.
我已经用下面的代码try 过这一点.
/*Code*/
myColumn.getStyleClass().add("ds-column-header-right");
/*Css*/
.ds-column-header-right .label{
-fx-alignment: CENTER_RIGHT;
-fx-padding: 2 10 2 0;
}
如果只存在这个自定义的css(ds-Column-Header-Right)定义,它就可以工作,并且标题标题右对齐.
但是,如果这两个CSS定义都存在,则标题文本始终左对齐,即使我已将右对齐样式显式分配给某些列.
如果不显式地将每一列指定给样式,如何解决该问题?
这是在Java 17、JavaFx 21.0.2下测试的
下面是一个完整的(最小)示例:
//Main.java
package application;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(final Stage primaryStage) {
try {
TableView<Person> tableView = new TableView<>();
TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
TableColumn<Person, String> emailColumn = new TableColumn<>("Email");
emailColumn.getStyleClass().add("ds-column-header-right");
tableView.getColumns().add(nameColumn);
tableView.getColumns().add(emailColumn);
VBox vbox = new VBox(tableView);
Scene scene = new Scene(vbox, 400, 400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(final String[] args) {
launch(args);
}
}
//Person.java
package application;
import javafx.beans.property.SimpleStringProperty;
public class Person {
private final SimpleStringProperty name;
private final SimpleStringProperty email;
public Person(final String name, final String email) {
this.name = new SimpleStringProperty(name);
this.email = new SimpleStringProperty(email);
}
public String getName() {
return name.get();
}
public void setName(final String fName) {
name.set(fName);
}
public String getEmail() {
return email.get();
}
public void setEmail(final String fEmail) {
email.set(fEmail);
}
}
/*application.css*/
.table-view .column-header .label{
-fx-alignment:CENTER_LEFT;
-fx-text-fill: blue;
}
.ds-column-header-right .label{
-fx-alignment: CENTER_RIGHT;
-fx-text-fill: red;
}