gpt4 book ai didi

java - 在 javafx tableview 中添加工具提示并更改表格单元格的颜色

转载 作者:行者123 更新时间:2023-12-01 09:18:54 25 4
gpt4 key购买 nike

我想在 tablview 中显示数据库结果。因此我有一个动态创建的表格 View :

  public void createTableView() throws Exception {
List<String> columnNames = new ArrayList<>();
columnNames = test.getColumnNames();

for (int i = 0; i < test.getColumnCount(); i++) {
TableColumn<ObservableList<String>,String> column = new TableColumn<>(columnNames.get(i));
final int j = i;

column.setCellValueFactory(new Callback<CellDataFeatures<ObservableList<String>, String>, ObservableValue<String>>(){
public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> param) {
return new SimpleStringProperty(param.getValue().get(j).toString());
}
});
tableView.getColumns().add(column);
}

添加数据库结果:

public void initializeTableView(List<List<String>> result) throws Exception {
ObservableList<ObservableList<String>> data = FXCollections.observableArrayList();
if (tableView.getColumns().size() == 0) {
createTableView();
}
for (int i = 0; i < result.size(); i++) {
ObservableList<String> row = FXCollections.observableArrayList();
row.addAll(result.get(i));
data.add(row);
}
tableView.setItems(data);

现在我得到了在同一个 TableView 中显示的第二个数据库结果。现在我想将第一个结果列表与第二个结果列表进行比较,如果值不相等,我想在工具提示中显示第一个结果并将单元格颜色更改为红色。

最佳答案

您可以使用自定义TableCell来比较数据。当然,最好不要将整个数据存储两次。如果更改稀疏,使用 Map 存储原始值会提高内存效率,但单元格样式的想法是相同的。

示例:

@Override
public void start(Stage primaryStage) {
// create sample data
List<List<String>> result = Arrays.asList(
Arrays.asList("a", "b"),
Arrays.asList("c", "d"),
Arrays.asList("e", "f"),
Arrays.asList("g", "h"),
Arrays.asList("i", "j")
);

TableView<ObservableList<String>> tableView = new TableView<>();
List<String> columnNames = Arrays.asList("column1", "column2");

for (int i = 0; i < columnNames.size(); i++) {
TableColumn<ObservableList<String>, String> column = new TableColumn<>(columnNames.get(i));
final int j = i;

column.setCellValueFactory((CellDataFeatures<ObservableList<String>, String> param) -> Bindings.stringValueAt(param.getValue(), j));

// use custom cells
column.setCellFactory(tc -> new TableCell<ObservableList<String>, String>() {

private final Tooltip tooltip = new Tooltip();

@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);

if (empty) {
// clear the cell
setStyle(null);
setText(null);
setTooltip(null);
} else {
setText(item);
String original = result.get(getIndex()).get(j);
if (Objects.equals(original, item)) {
// same value as original -> no tooltip, no background
setStyle(null);
setTooltip(null);
} else {
// different -> red background + tooltip
setStyle("-fx-background-color: red;");
setTooltip(tooltip);
tooltip.setText(original);
}
}
}

});
tableView.getColumns().add(column);
}

ObservableList<ObservableList<String>> data = FXCollections.observableArrayList();

for (int i = 0; i < result.size(); i++) {
ObservableList<String> row = FXCollections.observableArrayList();
row.addAll(result.get(i));
data.add(row);
}
tableView.setItems(data);

// do some modifications
data.get(0).set(1, "1");
data.get(3).set(0, "3");

Scene scene = new Scene(tableView);

primaryStage.setScene(scene);
primaryStage.show();
}

关于java - 在 javafx tableview 中添加工具提示并更改表格单元格的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40301875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com