【问题标题】:Dynamically Updating a ListView from a TextField (JavaFX)从 TextField (JavaFX) 动态更新 ListView
【发布时间】:2017-04-21 14:33:56
【问题描述】:

我正在尝试使用按钮上的简单事件处理程序将名称(字符串)应用到 JavaFX 中的 ListView 中,并接收来自 TextFields 的输入。所有字段似乎都有效且正确,只是没有更新到列表视图中

    private ListView<String> manifestList;
    manifestList = new ListView<>();
    manifestList.setId("List");
    manifestList.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);

ListView添加方法:

   public void addtoList(String manifestlist){
    manifestList.getItems().add(manifestlist);
   }

为输入生成文本框的 For 循环(我已将其预设为 name1、name2 等以对其进行测试)

    for( i = 0;i < editname.length;i++){
    editname[i] = new TextField("Name" + i);    
    }

将文本字段中的文本添加到列表视图的按钮处理程序(有 16 个文本框)

 Button add = new Button("add");

    add.setOnAction(new EventHandler<ActionEvent>(){
        @Override
        public void handle(ActionEvent event){

            for(i=0; i<16; i++){
            test.addtoList(editname[i].getText());
        }       
    }
});

test 是我从中调用 add 方法的类的变量名,列表视图位于该类中。调用 add 方法的按钮位于不同的场景/类中。

我无法完全弄清楚这里出了什么问题,我已经将文本字段的值打印到控制台并且打印正常 - 但是它们不会更新到 ListView。

我已经尝试在列表视图中使用带有预设字符串的 add 方法,并且添加得很好。

任何帮助/提示将非常感谢。

【问题讨论】:

标签: java string listview javafx


【解决方案1】:

将其命名为全局ObservableList,例如items

//create an ObservableList
ObservableList<String> items = FXCollections.observableArrayList();

然后以ObservableList 上的每次更新都反映到ListView&lt;String&gt; manifestList; 的方式使用它

 manifestList.setItems(items); 

现在每次您想向ListView 添加新项目时,请将其添加到ObservableList ?。所以你的方法可以修改为:

 public void addtoList(String manifestlist){ 
     items.add(manifestlist);
   }

看看下面的链接:

JAVAFX ListView chatting

以及来自 Oracle Bro's 的教程:

http://docs.oracle.com/javafx/2/ui_controls/list-view.htm

【讨论】:

  • 这是个好主意,我已经实现了它,但是它似乎又没有更新场景 gui 中的 ListView。但是,我将 ListView.getitems 打印到控制台并存储了正确的值(name1 name2 name3).. 与可观察列表相同。
  • @dan6657 看看 Sedrick Jefferson 的评论。ListViewObservableList 的值同步
  • @dan6657 您需要在问题中发布一个完整的示例来演示问题。否则人们只能盲目猜测你做错了什么。如果您的代码中的其他所有内容都正确,那么您已经发布的代码将起作用。创建一个minimal reproducible example
  • @dan6657 编辑了问题并添加了额外的教程链接,以便您更清楚错误可能是什么。请记住,如果您的代码没有任何问题,那么这是执行此操作的正确方法。如果您使用外部线程修改JavaFX elements,则必须使用Platform.runLater(); [以防万一]。
猜你喜欢
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
相关资源
最近更新 更多