如何从具有Javafx中具有对象数组列表的对象创建一个组合框



如果我的对象具有对象的数组:

class Event{        
    private ArrayList<Room> rooms;
    //..
    public void setRooms(ArrayList<Room> rooms) {
        this.rooms = rooms;
    }
    public ArrayList<Room> getRooms() {
        return rooms;
    }
}

//------------------------------------

class Room{
    private String roomId;
    private String roomName;
    public Room(String roomId, String roomName) {
        this.roomId = roomId;
        this.roomName = roomName;
    }
    public String getRoomId() {
        return roomId;
    }
    public String getRoomName() {
         return roomName;
    }
    public void setRoomId(String roomId) {
        this.roomId = roomId;
    }
    public void setRoomName(String roomName) {
         this.roomName = roomName;
    }
}

如何从室内对象中的桌子中创建一个组合?

我拥有的只显示某种对象标识符。

TableColumn<Event, ArrayList> roomsColumn = new TableColumn<>("Room Select");
roomsColumn.setMinWidth(200);
roomsColumn.setCellValueFactory(new PropertyValueFactory<>("rooms"));
//Create an observable list to populate the table with.
ObservableList<Event> eventList = FXCollections.observableArrayList();
//loop the json to populate the observable list
for (Event event : events.getEventList() ){
   eventList.add(event);
}
//populate the table
eventTable.setItems(eventList);
eventTable.getColumns().addAll(eventColumn, bDateColumn, eDateColumn, roomsColumn);

**所有列都是构建的,但房间列显示了一个逗号分隔的房间对象列表:

com.***.Room@345, com.***.Room@653, com.***.Room@889

您需要一个自定义的单元工厂才能用Combobox返回tablecell。

    roomsColumn.setCellFactory(call -> {
        // create a new cell for array lists
        return new TableCell<Event, ArrayList<String>>() {
            @Override 
            protected void updateItem(ArrayList<String> item, boolean empty) {
                super.updateItem(item, empty);
                // if there is no item, return an empty cell
                if (empty || item == null) {
                    setGraphic(null);
                } 
                else {
                    ComboBox<String> box = new ComboBox<>();
                    // set combo box items
                    box.setItems(FXCollections.observableArrayList(item));
                    // listen for changes
                    box.valueProperty().addListener((observable, oldValue, newValue) -> {
                        System.out.println("new room "+newValue);
                    });
                    // set cell contents
                    setGraphic(box);
                }
            }
        };
    });

最新更新