标签: observablelist

ListView没有反映更改

我在前面创建了一个TableView,并为每个TableColumns注册了Properties.编辑内部数据反映在TableView中就好了.

但是,使用ListView,它是一个不同的故事.除非我关闭框架并再次打开,否则不会立即显示更改.

我的ListView包含ActionSteps.请注意,我使用了Javafx bean属性.

package application.objects;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.function.IntPredicate;

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

public class ActionStep {

   private StringProperty actionStepID;
   private ObjectProperty<LocalDate> dateSet, dateFinished;
   private StringProperty stepName;
   private IntegerProperty completion;
   private ArrayList<StepComment> comments;



   public ActionStep(String name) {
      actionStepID = new SimpleStringProperty();
      stepName = new SimpleStringProperty();
      dateSet = new SimpleObjectProperty<LocalDate>();
      dateFinished = new SimpleObjectProperty<LocalDate>();
      completion = new SimpleIntegerProperty();
      stepName.setValue(name);
   }



   public void setName(String name) {
      stepName.setValue(name);
   }



   public String getName() …
Run Code Online (Sandbox Code Playgroud)

java listview javafx observablelist javafx-8

3
推荐指数
1
解决办法
3070
查看次数

ObservableList不更新ArrayList

对于学校作业,我们正在使用JavaFX中的ObservableList对象(对吗?).我已经在这一天工作了一天以上,无法解决这个问题.老师只告诉我们'谷歌',所以也没有帮助..

基本上,我们正在开发一个基本的管理应用程序来跟踪人员及其家人.人们是一个家庭的成员,一个家庭可以有多个成员.

当添加一个人或一个人时,他们被添加到一个observableList,然后应该更新一个ArrayList(所以数据可以被序列化)和一个GUI元素.这就是问题所在.

我们目前有以下实施:

private List<Persoon> personen;
private List<Gezin> gezinnen;
this.personen = new ArrayList<Persoon>();
this.gezinnen = new ArrayList<Gezin>();

private transient ObservableList<Persoon> observablePersonen;
private transient ObservableList<Gezin> observableGezinnen;
observablePersonen = FXCollections.observableArrayList(personen);
observableGezinnen = FXCollections.observableArrayList(gezinnen);
Run Code Online (Sandbox Code Playgroud)

然后,当添加项目时,我们执行以下操作:

Persoon p = new Persoon();
observablePersonen.add(p);
observablePersonen.notifyAll();
Run Code Online (Sandbox Code Playgroud)

在此之后,当我们检查'personen'列表时,添加的对象不存在:(

我们缺少明显的东西吗?

java javafx observablelist

3
推荐指数
1
解决办法
4067
查看次数

使用 HashMap 填充 TableView,该 HashMap 更改时将更新

我已经关注这个帖子了

将 hashmap 与 tableview 绑定 (JavaFX)

并创建了一个由 HashMap 中的数据填充的 TableView。

通过创建一个from并将其传递给 的构造函数,从被调用者接收TableView数据。(代码如下)HashMapmapObservableListmap.entrySet()ObservableListTableView

然而,虽然它是一个ObservableListwith SimpleStringPropertys,但当底层 HashMap 发生更改时,TableView 不会更新。

这是我的代码:

public class MapTableView extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        try {
            // sample data
            Map<String, String> map = new HashMap<>();
            map.put("one", "One");
            map.put("two", "Two");
            map.put("three", "Three");


            // use fully detailed type for Map.Entry<String, String> 
            TableColumn<Map.Entry<String, String>, String> column1 = new TableColumn<>("Key");
            column1.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Map.Entry<String, String>, String>, …
Run Code Online (Sandbox Code Playgroud)

java javafx hashmap tableview observablelist

3
推荐指数
1
解决办法
6351
查看次数

如何侦听 JavaFX ListView 中的选择更改

我已经搜索了一段时间,但没有找到任何有效的方法。我想让它每次用户单击我列表中的新客户时,客户详细信息都会显示在字段中(请参见下面的屏幕截图):

客户画面

在废弃了我在网上找到的一堆不起作用的解决方案之后,这是我迄今为止的基本代码:

@FXML
private ListView<Client> clientList;
private ObservableList clientObservableList;

@Override
public void initialize(URL url, ResourceBundle rb) {
    this.initializeGymState();//this loads in some dummy clients
    clientObservableList = FXCollections.observableArrayList(gym.getClients());
    clientList.getItems().setAll(clientObservableList);
    clientList.getSelectionModel().selectFirst();
    this.clientDisplayDetails();//this displays the client details, works fine
}
Run Code Online (Sandbox Code Playgroud)

我什至不知道从哪里开始这个解决方案,我有一个 ObservableList 的原因是因为我希望使用 ListChangeListener,但现在我认为 ListChangeListener 可以监听列表中的更改(添加、rmove 等) .),而不是选择的变化。我是 JavaFX 的新手,所以请像我 5 岁的孩子一样跟我说话:P

谢谢你们

java listview javafx scenebuilder observablelist

3
推荐指数
1
解决办法
3306
查看次数

如何通过 ListChangeListener 检索 ObservableList 中的更改项

ListChangeListener.Change.wasUpdated()用于检测ObservableList通过创建的s 的元素内的变化ObservableList.observableArrayList(Callback<E,Observable[]> extractor)

如何检索导致触发更改的确切项目?

编辑

可能这个问题还不够清楚,我举个例子。

class Foo {
    private StringProperty name = new SimpleStringProperty();
    public final StringProperty nameProperty() { return name; }
    public final String getName() { return name.get(); }
    public final void setName(String n) { name.set(n); }
    public Foo(String fooName) { setName(fooName); }
}

// Creates an ObservableList with an extractor
ObservableList<Foo> fooList = FXCollections.observableArrayList(foo -> new Observable[] { foo.nameProperty() });
Foo fooA = new Foo("Hello");
Foo fooB = new Foo("Kitty");
fooList.add(fooA); …
Run Code Online (Sandbox Code Playgroud)

java javafx observablelist

3
推荐指数
1
解决办法
2288
查看次数

JavaFX排序ListView

我的应用程序中有一个ListView,我想对条目进行排序.我还希望列表自动排序是否添加了新条目.

为此,我使用SortedList.Java API说"ObservableList中的所有更改都会立即传播到SortedList.".

当我在下面运行我的代码时,命令行的输出正是我所期望的.但是ListView没有排序.

我怎样才能做到这一点?谢谢!

public class Test extends Application
{
    public static final ObservableList names = FXCollections.observableArrayList();

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

    @Override
    public void start(Stage primaryStage) {
        final ListView listView = new ListView(names);
        listView.setPrefSize(200, 250);
        listView.setEditable(true);

        names.addAll("Brenda", "Adam", "Williams", "Zach", "Connie", "Donny", "Lynne", "Rose", "Tony", "Derek");

        listView.setItems(names);
        SortedList<String> sortedList = new SortedList(names);
        sortedList.setComparator(new Comparator<String>(){
            @Override
            public int compare(String arg0, String arg1) {
                return arg0.compareToIgnoreCase(arg1);
            }
        });

        for(String s : sortedList)
            System.out.println(s);
        System.out.println();

        names.add("Foo");
        System.out.println("'Foo' added"); …
Run Code Online (Sandbox Code Playgroud)

sorting listview javafx sortedlist observablelist

2
推荐指数
1
解决办法
1万
查看次数

make list view显示我想要的JavaFX

我创建了一个类并将其添加到一个可观察列表中,我还有一个列表视图,我将其项目设置为我的可观察列表.

问题是当我将一个对象从我的类添加到可观察列表时,列表视图在内存中显示它们的地址package.TestClass@574f5892,如何使列表视图显示存储在每个对象中的文本及其图像而不是它们的内存地址?

谢谢

listview javafx observablelist

2
推荐指数
1
解决办法
2895
查看次数

按值按升序和降序对ObservableList <Class>进行排序 - JAVAFX

我有一个具有playerName和Score的类,我在Controller类中创建了这个类的ObservableList.玩家和分数将添加到此阵列中.但问题是如何根据分数对其进行排序?

ObservableList<PlayerScore> playerScores = FXCollections.observableArrayList();
Run Code Online (Sandbox Code Playgroud)

这是它到目前为止的样子:

//stateACS is a toggle button
if (stateASC.isSelected()) {
    //Sort in asc order by player score
    FXCollections.sort(playerScores);
}else{
    //sort in desc order by player score

}
Run Code Online (Sandbox Code Playgroud)

sorting javafx observablelist

2
推荐指数
1
解决办法
1万
查看次数

为什么 JavaFX table.getItems().clear() 也会清除 ObservableList

我有一个 JavaFX 表定义为:

TableView<Person> table = new TableView<>;
//Person Class contains firstName,lastName & email properties
//table has three columns First Name, Last Name & Email
Run Code Online (Sandbox Code Playgroud)

一个ObservableListPerson小号

ObservableList<Person> persons = FXCollections.observableArrayList();
Run Code Online (Sandbox Code Playgroud)

后台服务,其任务是通过将条目(Person对象)添加到ObservableList persons.

表绑定为:

table.itemsProperty().bind(service.valueProperty());
Run Code Online (Sandbox Code Playgroud)

一切正常......但我最近发现,如果我清除表格项目

table.getItems().clear();
Run Code Online (Sandbox Code Playgroud)

它不仅会清除表格,还会清除ObservableList persons. 我想知道这是否是双向绑定?即使我在调用getItems().clear()表之前解除绑定,它也会产生相同的结果。有人可以解释一下我没有到达这里的意义吗?

java data-binding javafx tableview observablelist

2
推荐指数
1
解决办法
2405
查看次数

在JavaFX中使用CheckBox过滤ObservableList

我正在使用JavaFX作为辅助项目构建日志读取器,并且在尝试对进行过滤时陷入僵局TableView

我所拥有的是几个CheckBoxes(图片的LHS),它们基本上将充当所显示内容的过滤器TableView

窗口

Submit单击该按钮后,将打开一个后台线程以读取和解析文件。操作终止后,每次读取日志的结果都会插入到global中ObservableList<Log>

 public class Test_Filters extends Application {...

 private ObservableList<LogTest> logs = FXCollections.observableArrayList();

...}
Run Code Online (Sandbox Code Playgroud)

我遇到的麻烦是如何处理:

  1. CheckBox检查多个过滤器的情况。
  2. 一种CheckBox未经检查的情况。

对于1.,我想知道解决此问题的最佳方法是什么。假设我x选择了过滤器。这意味着我基本上必须从中过滤掉xObservaleList

logTable.setItems(logTable.getItems().filtered(log -> !log.getSource().equals(checkBox.getText())));
Run Code Online (Sandbox Code Playgroud)

java javafx observablelist

2
推荐指数
1
解决办法
1022
查看次数