在我的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循环时,它正在工作,但由于某种原因,我有两倍的列表元素,我也得到了第一个项目。我可以在没有第一项的情况下添加吗?
答案 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 - 初始状态:
1 - 按下按钮:
2 - 再次按下按钮: