当前位置: 首页 > 知识库问答 >
问题:

在 javafx 中更新网格窗格

程谭三
2023-03-14

在我的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是字符串列表。

同时,在应用程序中,可以更改此值。但是,由于我已经将此组合框添加到我的GridPane中,然后在该值更改(gui.columns)时添加到场景中,因此新值没有显示在组合框中。因为我已经添加了旧的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,但当我再次将combobox添加到gridpane时,结果是两个comboBox。我想要的只是将gui.course更新到我的gridPane。

编辑2:我按照我的代码的答案帖子的例子。

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

问题是我想要列表中的所有东西,除了第一个元素。当我使用< code>gui.course_P = new ComboBox时

共有1个答案

齐献
2023-03-14

这对我来说很好。每当按下该按钮时,都会将新项目添加到组合框中。我刚刚使用了一个可观察列表

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-初始状态:

1-按下按钮:

2-按钮再次按下:

 类似资料:
  • 每秒钟我都会创建一个新的圆,并将其添加到名为“形状”的圆阵列列表中。我需要他们将其添加到MyPane,以便在javafx窗口中显示 然而我得到了这个错误。 线程“Timer-0”java中出现异常。lang.IllegalStateException:不在FX应用程序线程上;currentThread=Timer-0 我曾尝试使用其他计时方法,如ScheduledExecutorService,但

  • 我无法在SceneBuilder(eclipse)中使用GridPane,当我尝试在项目中插入GridPane时,SceneBuilder会在没有提示任何消息的情况下退出。 这就是我在日志文件中找到的:

  • 我在fxml中有一个GridPane,它有一个文本标题和4个按钮。GridPane本身是居中对齐的,但所有按钮都在网格的列内左对齐。我知道如何使用Java代码更改项目的对齐方式,但这不是理想的情况,因为我希望所有样式都使用FXML和CSS处理。有谁能建议在JavaFX的GridPane视图中居中对齐单元格元素的最佳方法吗?

  • 我试图将乘法VBox添加到scrollpane中的gridpane(在下面的codesnippet中称为refPane)。 它在一行中添加不超过ITEMS_PER_ROW的Vbox,并在下一行中继续。也不应该有更多的行,然后ITEMS_PER_COLUM可见。问题是,如果我添加更多的ITEMS_PER_ROW*ITEMS_PER_COLUMN到网格中,而不是obingbeingscrollable

  • 我想这可能是图像后的行和列的问题,但是我已经尝试了一些方法,但没有成功。非常感谢任何帮助。谢谢

  • 问题内容: 我正在寻找某种有关组织应用程序的建议。 当您拥有包含内容选择的主菜单时,请按一个按钮,则获取控制器有两个选择:a)更改当前显示主菜单的内容b)创建一个新场景并将舞台切换到该场景一 你在用什么 有什么最佳实践吗? 目前,我更喜欢a),因为我可以保持事物链接状态栏等,但这是“干净”的方式吗? 问题答案: 首先,需要考虑一些事情: 1)更改场景将取消链接到您附加到该事件处理程序的链接,并且可