java表格如何刷新_JavaFX:如何刷新表格?

我在JavaFX TableView中刷新行样式有问题。JavaFX:如何刷新表格?

Java版本 “1.8.0_51”

的Java(TM)SE运行时环境(建立1.8.0_51-B16)

的HotSpot的Java(TM)服务器VM(25.51建设-B03,混合模式)

逻辑:

加载数据到的tableView。

通过setRowFactory将新样式设置为行。

将新数据加载到表中。

刷新新表格行的样式。 (不适用于我)

如何重新加载行的样式?

hCLt0.png

我的代码片段:

import javafx.application.Application;

import javafx.beans.property.SimpleIntegerProperty;

import javafx.beans.property.SimpleStringProperty;

import javafx.collections.FXCollections;

import javafx.collections.ObservableList;

import javafx.event.ActionEvent;

import javafx.event.EventHandler;

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.control.cell.PropertyValueFactory;

import javafx.scene.layout.VBox;

import javafx.scene.paint.Color;

import javafx.stage.Stage;

import javafx.util.Callback;

public class RowFactoryAndOptimisationDemo extends Application {

VBox root;

public ObservableList data = FXCollections.observableArrayList();

public TableView tableView = new TableView();

@Override

public void start(Stage stage) throws Exception {

root = new VBox();

root.autosize();

Scene scene = new Scene(root, Color.LINEN);

stage.setTitle("Row Factory Demo");

stage.setWidth(500);

stage.setHeight(300);

stage.setScene(scene);

stage.show();

configureTable();

}

public static void main(String[] args) {

Application.launch(args);

}

private void recheck_table() {

tableView.setRowFactory(new Callback, TableRow>() {

@Override

public TableRow call(TableView paramP) {

return new TableRow() {

@Override

protected void updateItem(RFDDomain paramT, boolean paramBoolean) {

super.updateItem(paramT, paramBoolean);

if (!isEmpty()) {

String style = "-fx-control-inner-background: #007F0E;"

+ "-fx-control-inner-background-alt: #007F0E;";

setStyle(style);

}

}

};

}

});

}

@SuppressWarnings("unchecked")

private void configureTable() {

int id =1;

for (int i = 1; i <= 1; i++) {

data.add(new RFDDomain(id++,"First Row", "This is for check.", 1));

data.add(new RFDDomain(id++,"Second Row", null, 2));

data.add(new RFDDomain(id++,"Third Row", "This is for check.", 3));

data.add(new RFDDomain(id++,"Fourth Row", "dil", 4));

}

tableView.setItems(data);

recheck_table();

TableColumn column0 = new TableColumn("Id");

column0.setCellValueFactory(new PropertyValueFactory("id"));

TableColumn column1 = new TableColumn("Title");

column1.setCellValueFactory(new PropertyValueFactory("name"));

TableColumn column2 = new TableColumn("Description");

column2.setCellValueFactory(new PropertyValueFactory("description"));

TableColumn column3 = new TableColumn("Status");

column3.setPrefWidth(55);

column3.setCellValueFactory(new PropertyValueFactory("status"));

TableColumn column4 = new TableColumn("Action");

column4.setCellValueFactory(new PropertyValueFactory("name"));

tableView.getColumns().addAll(column0, column1, column2, column3, column4);

this.root.getChildren().add(tableView);

Button button1 = new Button("Load new Data");

button1.setOnAction(new EventHandler() {

@Override public void handle(ActionEvent e) {

data.clear();

data.removeAll(data);

data.add(new RFDDomain(1,"First Row", "This is for check.", 1));

data.add(new RFDDomain(2,"Second Row", null, 2));

tableView.setItems(data);

recheck_table();

}

});

this.root.getChildren().add(button1);

}

/**

* Domain Model for this demo.

*/

public class RFDDomain {

private SimpleIntegerProperty id = new SimpleIntegerProperty();

private SimpleStringProperty name = new SimpleStringProperty();

private SimpleStringProperty description = new SimpleStringProperty();

private SimpleIntegerProperty status = new SimpleIntegerProperty();

public RFDDomain(int id,String name, String desc, int status) {

this.id.set(id);

this.name.set(name);

this.description.set(desc);

this.status.set(status);

}

public int getId() {

return id.get();

}

public SimpleIntegerProperty idProperty() {

return id;

}

public String getDescription() {

return description.get();

}

public SimpleStringProperty descriptionProperty() {

return description;

}

public String getName() {

return name.get();

}

public SimpleStringProperty nameProperty() {

return name;

}

public int getStatus() {

return status.get();

}

public SimpleIntegerProperty statusProperty() {

return status;

}

}

}

2015-08-15

stdex

+1

在你的代码中,你将现在空的行设置为纯背景吗? –

+0

button1.setOnAction - 仅设置2行,但3-4行的样式不重新加载。 –

+1

我在您的代码中看到您为包含数据的行设置样式,但我没有看到您设置的行的位置已更改,因此它们不包含纯数据样式的数据。顺便说一句,你为什么要调用recheck_table()这么多?你只需要设置行工厂一次。 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值