Отображение целочисленного табличного представления в javaFx в виде строки - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь показать табличное представление, где, когда значение в таблице является целым числом, например 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();

    }

Но он не работает, может кто-томожет взглянуть на это? Я знаю, что изменение БД может быть лучшим решением, но я хотел попробовать этот обходной путь

1 Ответ

2 голосов
/ 05 ноября 2019

cellFactory возвращает TableCell с. Сам вызов этого не приводит к ячейке, которая является частью TableView (или становится ее частью). Любой TableCell с правильно реализованным методом equals никогда не даст true, если передано 1 (или любой другой Integer).

Предполагая, что вы всегда хотите отобразить 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. Это облегчает чтение кода для других людей и делает его более читабельным даже для вас самих, так как все API Java (которые мне известны) используют следующие соглашения: имена типов начинаются с заглавной буквы.

...