在javafx中更新gridPane

时间:2016-11-17 09:58:52

标签: java javafx

在我的javafx项目中,我有一个包含多个值的ComboBox。当我的申请开始时,我会做以下事情:

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); 

其中gui.columns是字符串列表。

同时在应用程序中可以更改此值。但是因为我已经将这个comboBox添加到我的GridPane,然后当这个值改变(gui.columns)时,我的场景中的新值没有显示在comboBox中。因为我已经添加了旧的gui.course。有没有办法用新的gui.course_P更新createTestButtonPane?

编辑:我要做的是在侦听器上添加comboBox上的值,然后将其再次添加到gridPane:

String temp1 = course_name.getText();
gui.course_P = new ComboBox<String>();
gui.course_P.getItems().add(temp1);     
//gui.createTestButtonPane.add(gui.course_P, 2, 1);

该课程已正确添加到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));
    }

问题是我想要列表中除第1个元素之外的所有内容。 当我使用gui.course_P = new ComboBox<>(gui.columns);而不是for循环时,它正在工作,但由于某种原因,我有两倍的列表元素,我也得到了第一个项目。我可以在没有第一项的情况下添加吗?

1 个答案:

答案 0 :(得分:2)

这对我来说很好。每当按下按钮时,新项目都会添加到组合框中。我刚用ObservavleList<String>作为组合框的项目属性。无需再次清除或添加它。

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);
    }
}

0 - 初始状态:

enter image description here

1 - 按下按钮:

enter image description here

2 - 再次按下按钮:

enter image description here