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

用选项填充组合框

荣曾笑
2023-03-14

说到编程或java,我只是一个完全的初学者。所以一开始,我的计划是使用JavaFX(结合场景构建器)创建一个窗口,在那里我有一个按钮,可以引导我进入另一个窗口,在那里我有一个组合框。我谷歌了几个小时,想找到一种方法来填充组合框,但我找到的所有解决方案都不适合我。这就是为什么我认为我在这里犯了一些错误,我希望你能以某种方式帮助我。或者在列表中给我一个提示,我应该学习/阅读什么才能自己找到解决方案。首先,这是我构建第一阶段的main.java代码

主要.java:

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            Parent root= FXMLLoader.load(getClass().getResource("Scene-Hauptmenu.fxml"));
            primaryStage.setTitle("Fishbase");
            primaryStage.sizeToScene();
            primaryStage.setResizable(false);
            primaryStage.setScene(new Scene(root));
            primaryStage.show();

        } catch(Exception e) {
            e.printStackTrace();
        }       
    }

    public static void main(String[] args) {
        launch(args);
    }   
}

在我的“场景-Hauptmenu.fxml”中,重要的是将我带到第二个窗口的按钮:

Scene-Hauptmenu.fxml:

<Button id="btn_gefangen" fx:id="btn_gefangen" mnemonicParsing="false" onAction="#gefangen" text="Ich habe Fische gefangen!" GridPane.rowIndex="1" />

到目前为止一切正常,我可以毫无问题地切换到我的第二个窗口。但我认为我的主要问题在于我的控制器类,所以这里。

MyController.java:

public class MyController implements Initializable{
    private Node node;
    private Stage stage;
    private Scene scene;
    private FXMLLoader fxmlLoader;
    private Parent root;

    @FXML
    private Button btn_gefangen;

    @FXML
    private ComboBox<String> chobo_fisch; 

    @FXML
    private Button btn_gefangen_zurueck;

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

    }

    public void gefangen(ActionEvent event) throws IOException{

        node = (Node) event.getSource();
        stage = (Stage) node.getScene().getWindow();
        scene = stage.getScene();

        fxmlLoader = new FXMLLoader (getClass().getResource("gefangen.fxml"));

        root = (Parent) fxmlLoader.load();
        scene.setRoot(root);
        stage.sizeToScene();
        stage.setTitle("Fische eintragen");          
    }


    public void gefangen_zurueck(ActionEvent event) throws IOException{
        node = (Node) event.getSource();
        stage = (Stage) node.getScene().getWindow();
        scene = stage.getScene();
        fxmlLoader = new FXMLLoader (getClass().getResource("Scene-Hauptmenu.fxml"));
        root = (Parent) fxmlLoader.load();
        scene.setRoot(root);
        stage.sizeToScene();
        stage.setTitle("Fishbase");     
    }   
}

因此,“btn_gefangen”按钮将我带到另一个窗口,在那里我确实有带有fx:id“chobo_fisch”的组合框。

gefangen.fxml

<ComboBox fx:id="chobo_Fisch" prefWidth="150.0"/>

所以我用谷歌搜索了几个小时,但我仍然没有找到任何解决方案来填充组合框,其中包含适用于我的代码的选项。我做错了什么?任何人都可以在这里帮助我吗?

此致敬意

詹尼克

共有3个答案

汪兴旺
2023-03-14

试试这个:

ObservableList<String> items = FXCollections.observableArrayList();
    items.add("a");
    items.add("b");
    chobo_fisch.getItems().addAll(items);
商飞尘
2023-03-14

我对这些东西还不熟悉,但我认为这就是它应该看起来的样子,如果我明白你想要什么的话,至少也应该如此。示例如下:

< code >组合框

注:我是stackoverflow的新手。

屠和洽
2023-03-14

我发现了三种变体,具体取决于您的设置:

// Weekdays 
String week_days[] = 
    { "Monday", "Tuesday", "Wednesday", 
      "Thrusday", "Friday" }; 

// Create a combo box 
ComboBox combo_box = new ComboBox(FXCollections.observableArrayList(week_days)); 

(来源:https://www.geeksforgeeks.org/javafx-combobox-with-examples/)

final ComboBox emailComboBox = new ComboBox();
emailComboBox.getItems().addAll(
            "jacob.smith@example.com",
            "isabella.johnson@example.com",
            "ethan.williams@example.com",
            "emma.jones@example.com",
            "michael.brown@example.com"  
        );

来源:(https://docs.oracle.com/javafx/2/ui_controls/combo-box.htm)

<ComboBox fx:id="someName">
     <items>
         <FXCollections fx:factory="observableArrayList">
              <String fx:value="1"/>
              <String fx:value="2"/>
              <String fx:value="3"/>
              <String fx:value="4"/>
          </FXCollections>
      </items>
      <value>
           <String fx:value="1"/>
      </value>
</ComboBox>

编辑

正如fabian所提到的,您应该确保包括FXML导入:

<?import javafx.collections.FXCollections?>
<?import java.lang.String?>

第二个可能就不需要了

 类似资料:
  • 我正在创建一个影院系统,用户可以通过主页中的组合框选择电影。我在FilmController类中创建了一个数组列表,然后将其转换为observableList,并且正在努力将其内容填充到combobox(HomepageController)中。 这是arraylist的FilmController 我尝试在HomepageController中实现此功能,但它似乎给了我一个错误: 我已经研究过这

  • 我想在一个组合框中填充一些数据。这很好。但是,我想动态地改变组合框中的数据。 目前我有一个表,在组合框中,我在表列中显示数据的唯一值。现在,表数据存储在静态可观察列表变量中。我想根据表中显示的数据更改组合框中的数据。也就是说,如果存储表数据的静态可观察列表发生更改,我希望在没有手动干预的情况下更改组合框数据。 如果没有单独的静态变量用于组合框,这是否可能?

  • 问题内容: 我想使用css在html中的选择选项之间添加某种空间(填充,边距或其他)。我已经尝试使用类似的东西: 但是没有用。我已经读过,这是可以做到的,但在IE中不起作用。无论如何,即使它无法在IE中运行,我也希望它可以在其他浏览器中运行。 PS:当前正在使用Chrome 问题答案: 选择选项的样式非常有限,因为要在操作系统中的所有应用程序之间保持一致性和一致性,因此浏览器应限制某些基本元素的样

  • 问题内容: 我是Android的新手,我想尝试做一些非常基础的事情:Array中有5个字符串(例如’One’,’Two’…)。我想将这5个字符串添加到listactivity的列表视图中。 我的清单: 我的清单行: 基本上,我想将Array项绑定到TextView homeItemName。稍后我可能会在行中添加其他项,因此不能将listview绑定到条目。 谢谢! 问题答案: 对于代码,请快速浏

  • 本文向大家介绍jQGrid动态填充select下拉框的选项值(动态填充),包括了jQGrid动态填充select下拉框的选项值(动态填充)的使用技巧和注意事项,需要的朋友参考一下 本文给大家分享一段代码关于技巧jqgrid动态填充select 下拉框的选项值,非常不多说了,直接给大家贴代码了,具体代码如下所示: 注意:要return以及async:false否则没有效果 在colModel:中设置

  • 我正在查询Sql Server并返回一个List-我想使用此List作为我的组合框的源。下面是我正在使用的代码,它运行时没有错误,但我的组合框始终为空并且从不填充。这里有什么不正确的? 主要的Java语言 样品fxml