当前位置: 首页 > 知识库问答 >
问题:

Java FX。使用对的setCellValueFactory()

贺雅健
2023-03-14

我正在为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中显示结果?

通常我使用属性值来设置值,但使用配对大小写,我不知道该怎么做。

感谢您的宝贵时间。

共有1个答案

傅皓君
2023-03-14

您可以将值包装在可观察属性中并将其设置为单元格值工厂。

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);
 类似资料:
  • 私有静态无效printChartAnalysis(analysisResults r){

  • 我试图用一些随机信息创建一个简单的LineChart,但当我试图通过SceneBuilder使用fxml文件创建时,图表显示了但从未填充。每当我手动创建vbox、linechart和scene时,一切工作都很好。我真的很困惑,在使用fxml文件时,图表代码应该去哪里。

  • 我有一个JavaFX,有两个按钮(通过SceneBuilder创建)。 我希望其中一个按钮左对齐,另一个右对齐。(见截图) 从文档中,我已经知道如何在Java源代码中实现这一点: 我想知道如何实现这一点而不需要在我的Java文件中编写,但是 我如何只使用SceneBuilder或相应的fxml文件来实现这一点。 *我在Windows上 **这个答案不是我想要的,因为他使用的是工具栏,但我想知道如何

  • 当我从SourceForge网站下载JasperReports项目时,我创建JavaFx项目,我需要使用JasperReports库创建发票设计。提取的文件夹不包含dist文件夹,该文件夹包含构建发票设计所需的jar文件。文件夹包含这个文件夹,这里有什么问题“我是JasperReports的新手”

  • 问题内容: 因此,我知道JavaFx在使用线程时更新GUI的方法称为Task,但是代码是否以相似的方式工作或存在任何差异。让我举一个例子: GUI之外的另一个作为线程运行的类 在实际的GUI中 Task是否以完全相同的方式工作?还是存在差异?如果存在差异,您将如何修改此代码以在JavaFx项目中工作? 问题答案: 您是否正在寻找JavaFX中的SwingUtil.invokeLater副本。如果是

  • 搜索之后,我发现了两个有趣的答案: > 对 javaFX 的本机映像格式支持 使用javaFX控制gif图像 但是正如我所看到的,javaFX不支持APNG图像。如何使用任何外部库或编写一些代码来解决此问题。我需要一个解决方案... 谢谢你的帮助。

  • 我想在我的列表视图上有圆角。我目前使用的CSS使角变圆,直到我向ListView添加一个新字符串,然后角不再是圆的。我使用ObservableList来存储我的字符串,并将ListView设置为ObservableList。 我也检查了JavaFX CSS参考,但找不到任何对我的问题有用的东西。 无文本 添加文本后 我目前的 css

  • 问题内容: 可以说我有一堂课: 我有一个此类的ArrayList 是否可以使用对象名称属性作为选择选项来创建JavaFX ComboBox,而无需使用对象名称创建新的JavaFX ComboBox ? 伪代码: (可选)理想情况下,虽然应该显示名称,但在选择了一个选项后,该名称应该返回给我所选的Dummy的引用,而不仅仅是名称。那可能吗? 问题答案: 您可以使用自定义方式来显示适合您需求的项目: