2013-08-06 40 views
8

Tôi đang sử dụng JavaPro ObjectProperty trong một trong các lớp của tôi. Tôi đang sử dụng nó cho các tính năng liên kết. Vấn đề là tôi muốn mọi người có thể liên kết với nó, nhưng không phải để thay đổi giá trị. Tôi không thể nghĩ ra một cách chứng minh đẳng cấp để làm điều này (nơi mọi người sẽ không có cách nào để thay đổi nó từ bên ngoài), nhưng phải có một số cách để làm điều đó.Cài đặt chỉ đọc với thuộc tính JavaFx

Trả lời

8

Giải pháp

Bạn đang tìm kiếm ReadOnlyObjectWrapper.

mẫu

Đây là một cách sử dụng ví dụ lấy từ một sample tic tac toe game mà tôi đã viết:

class Square { 

    enum State { EMPTY, NOUGHT, CROSS } 

    private ReadOnlyObjectWrapper<State> state = 
    new ReadOnlyObjectWrapper<>(State.EMPTY); 

    public ReadOnlyObjectProperty<State> stateProperty() { 
    return state.getReadOnlyProperty(); 
    } 

    public State getState() { 
    return state.get(); 
    } 

    public void pressed() { 
    if (!game.isGameOver() && state.get() == State.EMPTY) { 
     state.set(game.getCurrentPlayer()); 
     ... 
    } 
    } 
} 

Giải thích

Điều này cho phép nhà nước của quảng trường là một đại diện bởi một thuộc tính để người dùng bên ngoài của Square có thể liên kết với trạng thái của Square, nhưng bản thân trạng thái được đóng gói trong Square nên chỉ Quảng trường có thể thay đổi trạng thái riêng của nó.

Ví dụ về cách sử dụng cho mẫu này là đối tượng SquareSkin có chứa các nút hiển thị để đại diện cho Square. Da có thể nghe các thay đổi đối với thuộc tính trạng thái của hình vuông được liên kết và cập nhật hình ảnh mà nó sử dụng để hiển thị hình vuông một cách thích hợp. Để thực sự đảm bảo rằng các giá trị Object kèm theo trong ReadOnlyWrapper không thể thay đổi bên ngoài, tốt nhất là làm cho các giá trị Object đó là immutable (ví dụ: các đối tượng không có hàm setter, chỉ có hàm getter).

Ví dụ Hơn nữa

Mã trò chơi tôi liên kết chứa nhiều ví dụ khác về mô hình liên kết và tập quán khác nhau (tôi đã viết nó một phần như một bài tập bắt buộc để xem những gì sẽ xảy ra nếu bạn sử dụng rất nhiều ràng buộc trong một ứng dụng).

+0

Ahhh ... Điều đó hoàn toàn có ý nghĩa. Có vẻ như phải có cách để làm điều này. Cảm ơn bạn. –

Các vấn đề liên quan