在javafx中更新gridPane

在javafx中更新gridPane,java,javafx,Java,Javafx,在我的javafx项目中,我得到了一个包含多个值的组合框。当我的申请开始时,我会执行以下操作: gui.course_P = new ComboBox<String>(); for (int i = 1; i < gui.columns.size(); i++) { gui.course_P.getItems().add(gui.columns.get(i)); } gui.createTestButtonPane.add(gui.course_P,

在我的
javafx
项目中,我得到了一个包含多个值的组合框。当我的申请开始时,我会执行以下操作:

gui.course_P = new ComboBox<String>();
    for (int i = 1; i < gui.columns.size(); i++) {
        gui.course_P.getItems().add(gui.columns.get(i));
}

gui.createTestButtonPane.add(gui.course_P, 2, 1); 
课程被正确地添加到comboBox,但是当我再次将comboBox添加到gridpane时,我得到了两个comboBox。我想要的只是将gui.course更新到我的gridPane

EDIT2:我按照回答文章的示例编写代码

    //gui.course_P =  new ComboBox<>(gui.columns);
    gui.course_P =  new ComboBox<String>();
    for (int i = 1; i < gui.columns.size(); i++) {
        gui.course_P.getItems().add(gui.columns.get(i));
    }
//gui.course\u P=新组合框(gui.columns);
gui.course_P=新组合框();
for(inti=1;i
问题是我想要列表中的所有元素,除了第一个元素。
当我使用
gui.course\u P=new组合框(gui.columns)时而不是for循环,它正在工作,但出于某种原因,我有两倍的列表元素,我也得到了第一项。我可以在没有第一项的情况下添加它吗?

这对我来说很好。每当按下按钮时,一个新项目就会添加到组合框中。我刚刚使用了一个
ObservableList
作为组合框的item属性。无需再次清除或添加它

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class ComboBoxTest extends Application {
    private ObservableList<String> source = FXCollections.observableArrayList();

    @Override
    public void start(Stage primaryStage) {
        Pane root = createPane();
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    private Pane createPane() {
        GridPane pane = new GridPane();
        Button addButton = new Button("add new item");
        addButton.setPrefWidth(150);
        addButton.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                source.add("Item" + source.size()); // editing the source
            }
        });

        ComboBox<String> comboBox = new ComboBox<>(source);

        pane.add(addButton, 1, 0);
        pane.add(comboBox, 1, 1);
        pane.setPrefHeight(200);
        pane.setPrefWidth(200);
        return pane;
    }

    public static void main(String[] args) {
        launch(args);
    }
}
导入javafx.application.application;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.ComboBox;
导入javafx.scene.layout.GridPane;
导入javafx.scene.layout.Pane;
导入javafx.stage.stage;
公共类ComboBoxTest扩展了应用程序{
私有ObservableList source=FXCollections.observableArrayList();
@凌驾
公共无效开始(阶段primaryStage){
窗格根=createPane();
primaryStage.setScene(新场景(根));
primaryStage.show();
}
专用窗格createPane(){
GridPane=新建GridPane();
按钮添加按钮=新按钮(“添加新项目”);
addButton.setPrefWidth(150);
addButton.setOnAction(新的EventHandler

1-按下按钮:

2-再次按下按钮:


在组合框中添加一个组件或项目侦听器,如果您随后更改了一个值,请删除旧值并添加新值。我添加了我的问题。我在侦听器上添加了新值,但我还想在侦听器上更新gridPane的内容。您可以删除旧值/覆盖它吗?删除它并重新编写课程吗?是的,就是这样我的意思是,当我试图将ArrayList转换为可观察列表时,我遇到了错误。我无法正确导入库。应该为此下载外部JAR吗?不,这是纯Java 8代码。可能您的Java版本错误(必须是8)。我在代码中包含了
importrs
。我希望它能有所帮助。对于将
ArrayList
转换为
observateList
,有一个
FXCollections的构造函数。observatarraylist
接受
Collection
,因此,
ArrayList
eclipse导入自动完成无法正常工作。现在它可以为ine!它可以工作!但是我可以添加源列表ComboBox ComboBox=new ComboBox(source);而不添加第一个元素吗?另外,当我没有直接将可观察列表添加到ComboBox时,我尝试使用for循环来添加它:gui.course\u P=new ComboBox();for(int I=1;Iimport javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; import javafx.scene.layout.GridPane; import javafx.scene.layout.Pane; import javafx.stage.Stage; public class ComboBoxTest extends Application { private ObservableList<String> source = FXCollections.observableArrayList(); @Override public void start(Stage primaryStage) { Pane root = createPane(); primaryStage.setScene(new Scene(root)); primaryStage.show(); } private Pane createPane() { GridPane pane = new GridPane(); Button addButton = new Button("add new item"); addButton.setPrefWidth(150); addButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { source.add("Item" + source.size()); // editing the source } }); ComboBox<String> comboBox = new ComboBox<>(source); pane.add(addButton, 1, 0); pane.add(comboBox, 1, 1); pane.setPrefHeight(200); pane.setPrefWidth(200); return pane; } public static void main(String[] args) { launch(args); } }