java - 多个 ComboBox JavaFX

标签 java rest javafx combobox tableview

我的问题是,当我在框中选择一个 Activity 时,每个组合框都会发生变化,我真的不知道该怎么做,我发布了控制该选项卡的类的完整代码

enter description

public class ProgettiImp  extends Fragment implements Initializable {

    private final ObservableList<AttivitaGiornaliere> data = FXCollections.observableArrayList(getList());

    private static final ObservableList<TypedActivites> datas = FXCollections.observableArrayList();

    private String nomes = null;
    private String cognomes = null;

    @FXML
    private TableView<TypedActivites> impieco = null;

    @FXML
    DatePicker iuorn;

    public ProgettiImp() throws IOException, JSONException {
    }


    @Override
    public void onCreateView(FXMLLoader fxmlLoader) {

        fxmlLoader.setLocation(getClass().getResource("../mainWindow/progetti_imp.fxml"));
        try {
            fxmlLoader.load();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {

        Callback<TableColumn<TypedActivites,AttivitaGiornaliere>, TableCell<TypedActivites,AttivitaGiornaliere>> comboBoxCellFactory
                = (TableColumn<TypedActivites,AttivitaGiornaliere> param) -> new ComboxEdit();
        impieco.setEditable(true);
        datas.forEach(dat -> System.out.println(dat.getN()+"\n"+dat.getS()));
        impieco.setItems(datas);


        TableColumn<TypedActivites, AttivitaGiornaliere> ora1 = new TableColumn("1a");
        ora1.setMinWidth(50);
        ora1.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
        ora1.setCellFactory(comboBoxCellFactory);
        ora1.setOnEditCommit(
                (TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
                        t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));

        TableColumn<TypedActivites, AttivitaGiornaliere> ora2 = new TableColumn("2a");
        ora2.setMinWidth(50);
        ora2.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
        ora2.setCellFactory(comboBoxCellFactory);
        ora2.setOnEditCommit(
                (TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
                        t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));

        TableColumn<TypedActivites, AttivitaGiornaliere> ora3 = new TableColumn("3a");
        ora3.setMinWidth(50);
        ora3.setCellFactory(comboBoxCellFactory);
        ora3.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
        ora3.setOnEditCommit(
                (TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
                        t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));

        TableColumn<TypedActivites, AttivitaGiornaliere> ora4 = new TableColumn("4a");
        ora4.setMinWidth(50);
        ora4.setCellFactory(comboBoxCellFactory);
        ora4.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
        ora4.setOnEditCommit(
                (TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
                        t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));

        TableColumn<TypedActivites, AttivitaGiornaliere> ora5 = new TableColumn("5a");
        ora5.setMinWidth(50);
        ora5.setCellFactory(comboBoxCellFactory);
        ora5.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
        ora5.setOnEditCommit(
                (TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
                        t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));

        TableColumn<TypedActivites, AttivitaGiornaliere> ora6 = new TableColumn("6a");
        ora6.setMinWidth(50);
        ora6.setCellFactory(comboBoxCellFactory);
        ora6.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
        ora6.setOnEditCommit(
                (TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
                        t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));

        TableColumn<TypedActivites, AttivitaGiornaliere> ora7 = new TableColumn("7a");
        ora7.setMinWidth(50);
        ora7.setCellFactory(comboBoxCellFactory);
        ora7.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
        ora7.setOnEditCommit(
                (TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
                        t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));

        TableColumn<TypedActivites, AttivitaGiornaliere> ora8 = new TableColumn("8a");
        ora8.setMinWidth(50);
        ora8.setCellFactory(comboBoxCellFactory);
        ora8.setCellValueFactory(cellData -> cellData.getValue().typObjProperty());
        ora8.setOnEditCommit(
                (TableColumn.CellEditEvent<TypedActivites,AttivitaGiornaliere> t) ->
                        t.getTableView().getItems().get(t.getTablePosition().getRow()).setTypObj(t.getNewValue()));

        impieco.setEditable(true);

        impieco.getColumns().addAll(ora1,ora2,ora3,ora4,ora5,ora6,ora7,ora8);
    }

    public List<AttivitaGiornaliere> getList() throws IOException, JSONException {
        List<String> list = new ArrayList<>();
        List<AttivitaGiornaliere> a = new ArrayList<>();
        String url = "http://localhost:8080/Alimos/api/attivita/id";
        UtilitiesM m = null;
        String json = getJson(url);

        JSONArray jsn = new JSONArray(json);

        int j = 0;
        while (j<jsn.length()) {
            JSONObject o = jsn.getJSONObject(j);
            Iterator<String> keysIterator = o.keys();
            while(keysIterator.hasNext()){
                String key = keysIterator.next();
                Object value = o.get(key);

                list.add(value.toString());
                a.add(new AttivitaGiornaliere(list.get(j).toString()));
            }
            j++;
        }

        return a;
    }


    public String getJson(String url) throws IOException {
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();

        // optional default is GET
        con.setRequestMethod("GET");

        int responseCode = con.getResponseCode();
        System.out.println("\nSending 'GET' request to URL : " + url);
        System.out.println("Response Code : " + responseCode);

        BufferedReader in = new BufferedReader(
                new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);

        }
        in.close();

        //print result
        System.out.println(response.toString());

        inputLine = response.toString();


        return inputLine;

    }

    public static String passDaThing(String name, String surname){
        System.out.println(name+surname);
        return String.valueOf(datas.add(new TypedActivites(name,surname)));
    }

Local Classes that defines the activities

public static class TypedActivites {

    private SimpleObjectProperty<AttivitaGiornaliere> opters = new SimpleObjectProperty<>() ;
    private SimpleStringProperty name;
    private SimpleStringProperty surname;

    public TypedActivites(AttivitaGiornaliere opters){
        this.opters = new SimpleObjectProperty(opters);
    }

    public TypedActivites(String n,String s) {
        this.name = new SimpleStringProperty(n);
        this.surname = new SimpleStringProperty(s);
    }


    public AttivitaGiornaliere getTypObj() {
        return opters.get();
    }

    public ObjectProperty<AttivitaGiornaliere> typObjProperty() {
        return this.opters;
    }

    public void setTypObj(AttivitaGiornaliere opters) {
        this.opters.set(opters);
    }


    public String getN() { return name.get(); }

    public StringProperty nameProperty() { return  this.name; }

    public void setName(String str) {
        this.name.set(str);
    }

    public String getS() { return surname.get(); }

    public StringProperty stringProperty() { return  this.surname; }

    public void setSurname(String str) {
        this.surname.set(str);
    }

}

public static class AttivitaGiornaliere  {

    private SimpleStringProperty option = null;

    public AttivitaGiornaliere(String option) {
        this.option = new SimpleStringProperty(option);
    }


    public String getOption() {
        return option.get();
    }

    public void setOption(String value) {
        option.set(value);
    }

    public StringProperty optionProperty() {
        return option;
    }

    @Override
    public String toString() {
        return option.get();
    }

}

Local Class that controls the Comboboxs

    class ComboxEdit extends TableCell<TypedActivites,AttivitaGiornaliere> {

        private ComboBox<AttivitaGiornaliere> combo[];
    combo[] = new ComboBox[] { 
              new ComboBox<>(),new ComboBox<>(),new ComboBox<>(),new ComboBox<>(),
              new ComboBox<>(), new ComboBox<>(),new ComboBox<>(),new ComboBox<>() };

        public ComboxEdit(){}

        @Override
        public void startEdit() {
            if (!isEmpty()) {
                super.startEdit();
                createComboBox();
                System.out.println("passare passa");
                setText(null);
                for (int i = 0; i < 7; i++) {
                    setGraphic(combo[i]);
                }
            }
        }

        @Override
        public void cancelEdit() {
            super.cancelEdit();

            setText(String.valueOf(getAct()));
            setGraphic(null);
        }

        @Override
        public void updateItem(AttivitaGiornaliere item, boolean empty) {
            super.updateItem(item, empty);

            if (empty) {
                setText(null);
                setGraphic(null);
            } else {
                for (int i = 0; i < 7; i++) {
                    if (isEditing()) {
                        if (combo[i] != null) {
                            combo[i].setValue(getAct());
                        }
                        setText(getAct().getOption());
                        setGraphic(combo[i]);
                    } else {
                        setText(getAct().getOption());
                        setGraphic(null);
                    }
                }
            }
        }

        private void createComboBox() {
            for(int i = 0; i<7; i++) {
            combo[i] = new ComboBox<>(data);
            comboBoxConverter(combo[i]);

                combo[i].valueProperty().set(getAct());
                combo[i].setMinWidth(this.getWidth() - this.getGraphicTextGap() * 0.6);
                int finalI = i;
                combo[i].setOnAction((e) -> {
                    System.out.println("Committed: " + combo[finalI].getSelectionModel().getSelectedItem());
                    commitEdit(combo[finalI].getSelectionModel().getSelectedItem());

                });

            }
        }

        private void comboBoxConverter(ComboBox<AttivitaGiornaliere> comboBox) {
            // Define rendering of the list of values in ComboBox drop down.
            for(int i = 0; i<7; i++) {
                comboBox.setCellFactory((c) -> new ListCell<AttivitaGiornaliere>() {
                        @Override
                        protected void updateItem(AttivitaGiornaliere item, boolean empty) {
                            super.updateItem(item, empty);

                            if (item == null || empty) {
                                setText(null);
                            } else {
                                setText(item.getOption());
                            }
                        }
                    });

            }
        }


        private AttivitaGiornaliere getAct(){
            return getItem() == null ? new AttivitaGiornaliere("") : getItem();
        }

    }

}

最佳答案

解决方案: ora1.setCellFactory(ComboBoxTableCell.forTableColumn(data));

关于java - 多个 ComboBox JavaFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39106069/

相关文章:

java - 网络服务 : Firefox can't establish a connection to the server at 192. 168.10.203:8080

java - Netbeans 无法找到或加载主类

java - @Configuration 和 @Bean 注释在此代码中起作用吗?

objective-c - 在 Objective C 中发布到 Web 服务 API?

VirtualFlow 中的 JavaFX 内存泄漏?

java - 如何在 Gradle 中的 JUnit 平台中进行两组测试

android - 从 Restful web 服务获取字节数组文件到 android

c++ - 异步 RestFul 与 Websocket

JavaFx:数据绑定(bind)(文本字段)可以在生产模式下使用吗?

intellij-idea - 如何在 IntelliJ IDEA 中创建 JavaFX 模块