java - 爪哇外汇。使用 Pair 的 setCellValueFactory()
问题描述
我正在努力为 Table 列编写 setCellValueFactory() 。
HRSearchController.java
import java.util.List;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.util.Pair;
public class HRSearchController {
private class AreaCell extends ListCell<Area> {
@Override
protected void updateItem(Area a, boolean flag) {
super.updateItem(a, flag);
this.setText(a == null ? "" : a.getPostal());
}
}
@FXML
private TextField input;
@FXML
private ListView<Area> list;
@FXML
private TableView<Pair<String, String>> table;
@FXML
private TableColumn<Pair<String, String>, String> key;
@FXML
private TableColumn<Pair<String, String>, String> value;
@FXML
void initialize() {
list.setCellFactory(lv -> new AreaCell());
list.getSelectionModel().selectedItemProperty().addListener((ob, oldSel, newSel) -> {
});
}
@FXML
void searchArea(ActionEvent event) {
String key = input.getText();
if (!key.isBlank()) {
ObservableList<Area> model = list.getItems();
Response result = HRjson.search(key);
List<Area> location = result.getLocation();
if (location != null) {
model.clear();
model.addAll(location);
}
}
}
}
和Area.java
import java.util.ArrayList;
import java.util.List;
import javafx.util.Pair;
public class Area {
private String prefecture;
private String city;
private String town;
private String city_kana;
private String town_kana;
private String x;
private String y;
private String postal;
public String getPrefecture() {
return prefecture;
}
public String getCity() {
return city;
}
public String getTown() {
return town;
}
public String getCity_kana() {
return city_kana;
}
public String getTown_kana() {
return town_kana;
}
public String getX() {
return x;
}
public String getY() {
return y;
}
public String getPostal() {
return postal;
}
List<Pair<String, String>> getPairs() {
List<Pair<String, String>> pairs = new ArrayList<>();
pairs.add(new Pair<String, String>("郵便番号", postal));
pairs.add(new Pair<String, String>("都道府県名", prefecture));
pairs.add(new Pair<String, String>("市区名", city));
pairs.add(new Pair<String, String>("市区名カナ", city_kana));
pairs.add(new Pair<String, String>("町村名", town));
pairs.add(new Pair<String, String>("町村名カナ", town_kana));
pairs.add(new Pair<String, String>("経度", x));
pairs.add(new Pair<String, String>("緯度", y));
return pairs;
};
@Override
public String toString() {
return prefecture + " " + city + " (" + city_kana + ") " + town + " (" + town_kana + ") " + "x: " + x + " "
+ "y: " + y + " " + "〒 " + postal + "\n";
}
}
我想让结果在键和值列中垂直显示。谁能帮助我如何在HRSearchController类中为 TableColumn 编写 setCellValueFactory ,然后在 TableView 中显示结果?
通常我使用 PropertyValueFactory 来设置值,但是对于 Pair case,我不知道该怎么做。
感谢您的时间。
解决方案
您可以将值包装在可观察属性中并将其设置为单元值工厂。
TableView<Pair<String,String>> tableView = new TableView<>();
tableView.getItems().addAll(new Pair<>("A","Apple"),new Pair<>("B","Ball"),new Pair<>("C","Cat"));
TableColumn<Pair<String,String>, String> keyCol = new TableColumn<>("Key");
keyCol.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().getKey()));
TableColumn<Pair<String,String>, String> valCol = new TableColumn<>("Value");
valCol.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().getValue()));
tableView.getColumns().addAll(keyCol,valCol);
推荐阅读
- search - MarkLogic 地理空间表示和后续搜索
- vba - 如果不重复,如何突出显示选定的文本?
- swift - SwiftUI VStack 间距:无法正常工作
- angular - Angular Google Maps 模块在本地渲染,但不在生产环境中
- java -
要么被声明为抽象,要么在中实现抽象方法 onBindViewHolder(VH,int) - node.js - 为什么会发生这种情况,res.redirect() 方法的范围仅限于 express 中的 findByIdAndRemove 方法
- spring-boot - Spring boot千分尺datadog套接字连接错误
- node.js - 使用 res.redirect() 时,带有 Express 的 Node.js 不会重定向到外部 URL
- selenium - selenium 错误 WebDriverException:未知错误:asp 核心中没有 chrome 二进制文件
- r - 与其他方法相比,使用 Caret 包的 KNN 给出了不好的结果