首页 > 解决方案 > 在 javaFx 中将整数表视图显示为字符串

问题描述

我试图显示一个表视图,其中当表中的值是一个像 1 这样的整数时,例如我想显示一个字符串。到目前为止,我试图像这样获得 cellValue:

public void changeView() {
        if(intervall.getCellFactory().call(intervall).equals(1)) {
            intervall.getCellFactory().call(intervall).setText("Täglich");
        }
    }

我在设置单元格值后在我的初始化中调用该方法。

public void initializeTable() {

        try {

            // Ablesen
            Statement pStatement = connection.createStatement();
            flightList = FXCollections.observableArrayList();
            ResultSet myRs = pStatement
                    .executeQuery("select * from fluglinie where fluggesellschaft =\"" + fluggesellschaft + "\"");
            while (myRs.next()) {
                flightList.add(new flightRouteAddModel(myRs.getString("startFlughafen"),
                        myRs.getString("zielFlughafen"), myRs.getString("startDatum"), myRs.getString("flugzeug"),
                        myRs.getInt("intervall"), myRs.getInt("anzahlEconomy"), myRs.getInt("anzahlBusiness"),
                        myRs.getFloat("preisEconomy"), myRs.getFloat("preisBusines"), myRs.getFloat("distanz")));

            }

        } catch (Exception e) {
            System.out.println(e);

        }


        startAirport.setCellValueFactory(new PropertyValueFactory<>("startAirport"));
        targetAirport.setCellValueFactory(new PropertyValueFactory<>("targetAirport"));
        flightDate.setCellValueFactory(new PropertyValueFactory<>("flightDate"));
        airplane.setCellValueFactory(new PropertyValueFactory<>("airPlane"));
        intervall.setCellValueFactory(new PropertyValueFactory<>("intervall"));
        seatCountEco.setCellValueFactory(new PropertyValueFactory<>("countEconomy"));
        seatCountBus.setCellValueFactory(new PropertyValueFactory<>("countBusiness"));
        priceEco.setCellValueFactory(new PropertyValueFactory<>("priceEconomy"));
        priceBus.setCellValueFactory(new PropertyValueFactory<>("priceBusiness"));
        distance.setCellValueFactory(new PropertyValueFactory<>("distance"));

        table.setItems(flightList);
        changeView();

    }

但它不起作用,有人可以看看这个吗?我知道更改数据库可能是一个更好的解决方案,但我有点想尝试这种解决方法

标签: javasqljavafxtableview

解决方案


cellFactory回报TableCells 。自己调用它不会导致单元格TableView成为(或成为其中的一部分)的一部分。如果传递了1 (或任何其他 ),则任何TableCell具有适当实施equals方法的方法都不会产生1 。trueInteger

假设您总是想显示Täglich而不是 1,解决此问题的方法是cellFactory为此列使用自定义:

intervall.setCellFactory(col -> new TableCell<flightRouteAddModel, Integer>() {

    @Override
    protected void updateItem(Integer item, boolean empty) {
        String text = "";
        if (item != null) {
            switch(item) {
            case 1:
                text = "Täglich";
                break;
            case 7:
                text = "Wöchentlich";
                break;
            default:
                text = String.format("Alle %d Tage", item);
                break;
            }
        }
        setText(text);
    }

});

顺便说一句:请了解 java 命名约定。这使得代码更容易被其他人阅读,它甚至应该让你自己也更容易阅读,因为所有的 java API(我知道的)都使用这些约定:类型名称以大写字母开头。


推荐阅读