如何通过不同的泛型的回调类?

问题描述 投票:1回答:1

对于JFXTreeTableColumn我写了一个自定义单元格工厂回调。代码工作正常,但如果我想通过不同的泛型是什么?

我已经尝试通过仿制药?或T,S,但我肯定做错了什么

public class CallbackImpl implements Callback<TreeTableColumn<Order, String>, TreeTableCell<Order, String>> {

    private final ObservableList<String> paymentData;

    public CallbackImpl(ObservableList<String> paymentData) {
        this.paymentData = paymentData;
    }

    @Override
    public TreeTableCell<Order, String> call(TreeTableColumn<Order, String> tc) {
        ComboBox<String> combo = new ComboBox<>();
        combo.getItems().addAll(paymentData);
        JFXTreeTableCell<Order, String> cell = new JFXTreeTableCell<Order, String>() {
            @Override
            protected void updateItem(String payment, boolean empty) {
                super.updateItem(payment, empty);
                if (empty) {
                    setGraphic(null);
                } else {
                    combo.setValue(payment);
                    setGraphic(combo);
                }
            }
        };
        return cell ;
    }
}

我想传递一个表<DifferentClass, String>甚至<DifferentClass, Integer>(我知道,我必须要改变的代码整数工作)。

用法在FXML控制器:col.setCellFactory(new CallbackImpl(paymentData));

java javafx callback
1个回答
4
投票

我只是做了一个快速变化的仿制药。由于我没有完整的代码,我不知道它是否将所有的工作(或者,如果一切都改变了我应该改变),但它会给你粗略的想法如何试图做到这一点:d

class CallbackImpl<V, U> implements Callback<TreeTableColumn<V, U>, TreeTableCell<V, U>>
{

    private final ObservableList<U> paymentData;

    public CallbackImpl(ObservableList<U> paymentData) {
        this.paymentData = paymentData;
    }

    @Override
    public TreeTableCell<V, U> call(TreeTableColumn<V, U> tc) {
        ComboBox<U> combo = new ComboBox<>();
        combo.getItems().addAll(paymentData);
        JFXTreeTableCell<V, U> cell = new JFXTreeTableCell<V, U>() {
            @Override
            protected void updateItem(U payment, boolean empty) {
                super.updateItem(payment, empty);
                if (empty) {
                    setGraphic(null);
                } else {
                    combo.setValue(payment);
                    setGraphic(combo);
                }
            }
        };
        return cell ;
    }
}

只要使整个CallbackImpl通用的,那么你可以指定你想使用它的时候给它什么。

© www.soinside.com 2019 - 2024. All rights reserved.