我刚刚开始使用JavaFX,我发现它非常酷,所以我尝试将ToDListItem类的arraylist实现到我的FXML文件的listView中。
我尝试在我的todoitems数组列表中添加项目,然后将其全部设置到在我的FXML文件中具有id 'ToDoList‘的listView中,但是当UI显示时似乎没有发生任何事情
package sample;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import sample.ToDoList.ToDoItem;
import java.time.LocalDate;
import java.time.Month;
import java.util.ArrayList;
import java.util.List;
public class Controller {
private List<ToDoItem> todoitems;
@FXML
private ListView ToDoList ;
public void intialize(){
ToDoItem item1= new ToDoItem("Going to Sea","Going to Sea with thamer and kais",
LocalDate.of(2020, Month.JUNE,16));
ToDoItem item2= new ToDoItem("JavaFx","Getting ready for real programming real world stuff",
LocalDate.of(2020, Month.JULY,14));
ToDoItem item3= new ToDoItem("Sleep & Chill","Going to Watch Youtube Later & Chill",
LocalDate.of(2020, Month.JANUARY,13));
todoitems= new ArrayList<>();
todoitems.add(item1);
todoitems.add(item2);
todoitems.add(item3);
ToDoList.getItems().setAll(todoitems);
ToDoList.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
}
}
FXML文件。
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.control.ListView?>
<BorderPane fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml">
<left>
<ListView fx:id="ToDoList">
</ListView>
</left>
</BorderPane>
当UI显示时,我没有得到任何结果
发布于 2019-06-20 04:44:33
该方法应命名为initialize,而不是intialize。我宁愿使用javafx.fxml.Initializable来避免拼写错误的问题。
This is not the recommended approach
List<T> content = ...
getItems().setAll(content);
上面显示的方法的问题是内容列表被复制到项目列表中。
使用:
ObservableList<T> content = ...
listView.setItems(content);
public class Controller {
private final List<ToDoItem> todoItems = FXCollections.observableArrayList();
@FXML
private ListView ToDoList ;
public void initialize() {
ToDoList.setItems(todoItems);
ToDoList.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
populate();
}
private void populate () {
todoItems.add(new ToDoItem("Going to Sea","Going to Sea with thamer and kais",
LocalDate.of(2020, Month.JUNE,16)));
todoItems.add(new ToDoItem("JavaFx","Getting ready for real programming real world stuff",
LocalDate.of(2020, Month.JULY,14)));
todoItems.add(new ToDoItem("Sleep & Chill","Going to Watch Youtube Later & Chill",
LocalDate.of(2020, Month.JANUARY,13)));
}
}
确保方法ToDoItem.toString被正确覆盖。
https://stackoverflow.com/questions/56673747
复制相似问题