У меня есть этот простой код:JavaFX просмотр таблицы строк цвет
import javafx.application.Application;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableRow;
import javafx.scene.control.TableView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Example extends Application
{
@Override
public void start(Stage stage) throws Exception
{
TableView<Integer> table = new TableView<>();
TableColumn<Integer, Integer> column = new TableColumn<>();
column.setCellValueFactory(param -> new SimpleObjectProperty<>(param.getValue()));
ObservableList<Integer> items = FXCollections.observableArrayList();
table.getColumns().add(column);
table.setItems(items);
table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
for (int i = 0; i < 500; i++)
items.add((int) (Math.random() * 500));
BooleanProperty disable = new SimpleBooleanProperty();
table.setRowFactory(param ->
{
TableRow<Integer> row = new TableRow<>();
row.disableProperty().bind(disable);
row.disableProperty().addListener((observable, oldValue, newValue) ->
{
if (newValue)
row.setStyle("-fx-background-color: red");
else
row.setStyle("");
});
return row;
});
Button button = new Button("Disable all rows");
button.setOnAction(event -> disable.set(true));
stage.setScene(new Scene(new VBox(table, button)));
stage.show();
}
public static void main(String[] args)
{
launch(args);
}
}
Когда я запускаю его и нажмите на кнопку, он должен окрасить все строки. Он работает, пока вы не прокрутите стол вниз. Затем происходит что-то странное, некоторые строки не будут яркими, и когда вы прокрутите назад, они будут красочными, а некоторые другие не будут.
Но когда вы сначала прокручиваете и затем нажимаете кнопку, все будет хорошо. Я понятия не имею, что там происходит, мне кажется, что это ошибка.
В исходном коде мне нужно отключить несколько строк, потому что мне нужно отключить таблицу. Тем не менее, это не сработает, даже если мы переключим свойство disable на редактируемое свойство.
У кого-нибудь есть идея, как исправить это и почему он не работает?