ComboBoxTableCell зависит от другого в своем роде для JavaFx - PullRequest
0 голосов
/ 06 ноября 2018

Хотел бы я найти это сам (нашел много других полезных ответов - от James_D), но вот моя история.

1) У меня есть «центральный» репозиторий Items , который состоит из объектов с параметрами, как показано ниже:

listOfItems.add(new Item("ABCD", "typeA", new ArrayList<String>(Arrays.asList("10", "20", "30")))); 
listOfItems.add(new Item("EFGH", "typeB", new ArrayList<String>(Arrays.asList("40", "50", "60"))));

2) У меня есть табличное представление JavaFx, где я хочу сохранить - в виде строк - некоторые Компоненты , которые состоят из 10 значений, в которых частью этих компонентов являются три столбца / значения из упомянутого репозитория Items @ point number 1 , Это заставило меня создать «generateCellValueFactory», которая выглядит следующим образом:

private void generateCellValueFactory(TableColumn<Component, String> column, String name) {
    if(name.equals("Items_string_one")) {
        column.setCellValueFactory(cellData -> cellData.getValue().getProperty(name));
        ArrayList<String> list = itemsRepository.getFirstStrings(); //["ABCD" & "EFGH"]
        generateCombo(column, name,  list);
    } else if (name.equals("Items_lists_of_Strings")) {
        column.setCellValueFactory(cellData -> cellData.getValue().getProperty(name));
        List<String> list = itemsRepository.getUniqueStringsListsOfStrings();
// ! Unfortunately -> this returns me UNIQUE like list of every string inside those so in our case: ["10", "20", "30", "40", "50", "60"]
        generateCombo(column, name, list);
// 8 other columns factories - second string from Item + 7 not a part of "Items" repository. Overall 10 columns.

3) Как мы видим, мы включили внутренний метод generateCombo ->, так как я хочу, чтобы ВСЕ десять ячеек для каждого компонента были "ComboBoxTableCells", и этот элемент отвечает за часть setCellFactory:

private void generateCombo(TableColumn<Component, String> column, String name, List<String> list) {
    ObservableList<String> data = FXCollections.observableArrayList(list);
    if (name.equals("Items_string_one")) {
        column.setCellFactory(new Callback<TableColumn<Component, String>, TableCell<Component, String>>() {
            @Override
            public TableCell<Component, String> call(TableColumn<Component, String> param) {
                ComboBoxTableCell<Component, String> tableCell = new ComboBoxTableCell<Component, String>(data) {
                    @Override
                    public void commitEdit(String x) {
                        // Do something fancy
                     }
                 };
                 return tableCell;
            }
        });
    }else if (name.equals("Items_lists_of_strings")) {
        column.setCellFactory(new Callback<TableColumn<Component, String>, TableCell<Component, String>>() {

            @Override
            public TableCell<Component, String> call(TableColumn<Component, String> param) {
                ComboBoxTableCell<Component, String> tableCell = new ComboBoxTableCell<Component, String>(data) {
                    @Override
                    public void commitEdit(String x) {
                        // Do something fancy
                    }
                };
                return tableCell;
            }
        });
    }

Вот моя проблема: Прямо сейчас, когда я выбираю первый столбец, у меня в параметрах comboBox:
x ABCD / EFGH и это прекрасно -> Я рад здесь. Я также рад, потому что все восемь колонн работают на меня как шарм.

Для столбца "Items_lists_of_Strings" я могу выбрать из уникального списка любой возможности. Не плохо, но и не то, что я действительно хотел, так как я хочу иметь вычисление «spec_errors-proof», следовательно, когда кто-то выбирает ABCD -> он может получить 10/20/30 в другом столбце. Я хочу, чтобы в этом ComboBoxTableCell параметры "привязывались" к репозиторию Предметов:

IF -> первый столбец -> ABCD
THEN -> ComboBoxTableCell имеет опции «для проверки»: «10», «20», «30».

Я надеюсь, что смогу предоставить каждую деталь. Я попытался сделать код для этой проблемы общим. Заранее спасибо, и я буду ждать дальнейших вопросов и проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...