JavaFX引用主数组列表

标签 java arrays listview arraylist javafx

我正在编写一个模拟酒店预订系统,有两个菜单:员工和客人。创建的房间存储在名为 roomArray 的主数组中,并添加到员工菜单中的 ListView 中,并添加到宾客菜单中的 ListView 中。房间可以是可用的或可预订的,但是只有可用的房间才会显示在宾客菜单 ListView 中,所以我可能有 5 个房间,但只有 2 个房间显示在宾客菜单 ListView 中。如果用户点击第二个房间,我不想尝试预订主房间Array static ArrayList中的索引1房间,因为它们不匹配。

例如,假设在员工 ListView 中我有三个房间,其中两个已预订。在宾客 ListView 中,仅显示可用的房间。因此,右侧的 ListView 将显示选定的索引 0,但主 roomArray 中同一房间的相同索引为 1。如何制作引用主列表中房间的可用房间数组列表的中介?

内森

最佳答案

由于您使用的是 JavaFX,因此您应该为您的房间使用 ObservableList。此外,您需要使用 FilteredListFXCollections.observableArrayList(extractor) .

这是实现它的方法:

public class Room {
    public enum State {AVAILABLE, BOOKED}

    private final ObjectProperty<State> state = new SimpleObjectProperty<>(AVAILABLE);
    public final ObjectProperty<State> stateProperty() { return state; }
    public final State getState() { return state.get(); }
    public final void setState(final State value) { state.set(state); }
}

主类:

private final ObservableList<Room> rooms;
public final ObservableList<Room> getRooms() { return rooms; }

private final ObservableList<Room> guestRooms;
public final ObservableList<Room> getGuestRooms() { return guestRooms; }

// Constructor
public MyClass() {
    rooms = FXCollections.observableArrayList(room -> new Observable[] {room.stateProperty()});

    guestRooms = rooms.filtered(room -> room.getState() == Room.State.AVAILABLE);
}

guestRooms 列表只是 rooms 列表的包装,使用 Predicate 进行过滤。过滤后的列表将根据 rooms 列表进行更改,但它只会对列表本身的更改使用react(添加、删除、替换元素)。为了确保它响应现有房间状态的变化,您需要使用 FXCollections.observableArrayList(extractor) 重载。此重载允许您控制每个 Room 对象中的哪个属性也会触发 ListChangeListener.Change,这也会导致筛选列表自行更新。

关于JavaFX引用主数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43625334/

相关文章:

java - 构造函数 BitmapDrawable() 已弃用修复

javascript - 如果JS中存在值,如何根据日期按降序对数组进行排序?

ruby - 数组大小太大 - ruby

java - 删除数组列表中 ListView 中的项目

java - 为什么我不能给类起不同于文件名的名称?

java - 如何使用 Spring Boot 在 Redis 中存储 List<Object> 类型的值?

java - 单击 ListView 中的某些项目时如何影响 ListView 之外的元素?

android - 无法通过 ListView 检测手势

java - 如何在 GEF 编辑器中实现自定义 FlowLayout?

PHP - 从平面数组制作嵌套树菜单结构