Я не смог найти способ стилизовать (установить цвет фона) области столбца-заполнителя, которая появляется при появлении (вертикальной) полосы прокрутки.
Я говорю об этой части:
Это должно быть возможно с помощью CSS или стиля кода. Я создал этот MRE:
record Person(String name, int age) {
}
@Override
public void start(Stage stage) {
TableView<Person> test = new TableView<>();
test.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY_ALL_COLUMNS);
// Create columns
TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory(p -> new SimpleStringProperty(p.getValue().name));
TableColumn<Person, Integer> ageColumn = new TableColumn<>("Age");
ageColumn.setCellValueFactory(person -> new SimpleIntegerProperty(person.getValue().age).asObject());
test.getColumns().addAll(nameColumn, ageColumn);
ObservableList<Person> data = FXCollections.observableArrayList(
new Person("John Doe", 30),
new Person("Jane Doe", 28),
new Person("Michael Smith", 35),
new Person("Emma Johnson", 22),
new Person("Olivia Williams", 27),
new Person("Noah Brown", 31),
new Person("Liam Jones", 29),
new Person("Mason Garcia", 26),
new Person("Lucas Miller", 24),
new Person("Ethan Davis", 32),
new Person("Ava Martinez", 21),
new Person("Sophia Rodriguez", 25)
);
test.setItems(data);
test.setMinHeight(500);
stage.setScene(new Scene(test));
stage.show();
}
Ссылка на CSS для TableView предполагает, что вы, возможно, ищете filler
, Region
, используемый column-header-background
. Вариант этого примера иллюстрирует эффект:
Код JavaFX:
table.getStylesheets().add("sample.css");
образец.css
.table-view .column-header-background .filler {
-fx-background-color: red;
}
Похожие варианты использования можно найти здесь. Для справки, добавление sample.css
к вашему фрагменту дает сопоставимый результат:
ТаблицаFiller.java
import javafx.application.Application;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
public class TableFiller extends Application {
record Person(String name, int age) {}
@Override
public void start(Stage stage) {
TableView<Person> test = new TableView<>();
test.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY_ALL_COLUMNS);
TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory(p -> new SimpleStringProperty(p.getValue().name));
TableColumn<Person, Integer> ageColumn = new TableColumn<>("Age");
ageColumn.setCellValueFactory(person -> new SimpleIntegerProperty(person.getValue().age).asObject());
test.getColumns().addAll(nameColumn, ageColumn);
ObservableList<Person> data = FXCollections.observableArrayList(
new Person("John Doe", 30),
new Person("Jane Doe", 28),
new Person("Michael Smith", 35),
new Person("Emma Johnson", 22),
new Person("Olivia Williams", 27),
new Person("Noah Brown", 31),
new Person("Liam Jones", 29),
new Person("Mason Garcia", 26),
new Person("Lucas Miller", 24),
new Person("Ethan Davis", 32),
new Person("Ava Martinez", 21),
new Person("Sophia Rodriguez", 25)
);
test.setItems(data);
test.getStylesheets().add("sample.css");
stage.setScene(new Scene(test));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
К вашему сведению (и это может не соответствовать вашим требованиям): если вы хотите стилизовать больше, чем просто наполнитель в заголовке, вы можете рассмотреть возможность использования темы javafx, например. установив базовый цвет -fx.