설명 없음

Sam Jaffe b097b8037d Oh lawd he documenting 6 년 전
src b097b8037d Oh lawd he documenting 6 년 전
.gitignore 9e690017ed Initializing repository with ignore lists: [ Java, Maven ] 8 년 전
LICENSE 9e690017ed Initializing repository with ignore lists: [ Java, Maven ] 8 년 전
README.md b097b8037d Oh lawd he documenting 6 년 전
pom.xml aba84ad33e Fixing a bug in notifySubscribers 8 년 전

README.md

Observable - Disjoint UI updates for complex objects

This library exists to combine together two objectives in updating UI objects: 1) Be able to 'remotely' notify UI objects about updates without having to iterate through the entire component tree. 2) Allow editting of a shared resource from multiple potential call sites without needing a controller object that holds references to every single interested view.

This is a useful construct in the situation where you have a large number of fixed GUI components in a program (for example, rendering the various statistics of a Dungeons and Dragons (c) character), because the connections are made anonymously.

Requirements

  • Java 7
  • org.leumasjaffe.event
  • Google Guava

    Installation

    Steps

    1) Download or clone this repository. 2) mvn install 3) Add the below block to your pom.xml

    Maven Artifact

    <dependency>
    <groupId>org.leumasjaffe</groupId>
    <artifactId>observable</artifactId>
    </dependency>
    

    Example Code Snippets

    class SpellBook extends Observable {
    int spellSlotsRemaining, maxSpellSlots;
    List<List<Spell>> spellsAtLevel;
    }
    
    class SpellBookUI extends JPanel {
    ObservableListener<JTextField, SpellBook> listener;
    SpellBookUI(SpellBook model) {
    JTextField spellsRemaining = new JTextField();
    add(spellsRemaining);
        
    // Set up a listener to anonymously update when model changes
    listener = new ObservableListener<>(spellsRemaining, (text, book) -> {
      text.setText(book.getSpellSlotsRemaining());
    });
        
    // Automatically invokes callback, setting the text field
    listener.setObserved(model);
    }
    }
    
    class CastSpellCommand {
    SpellBook book;
    void cast(Spell spell) {
    // ...
    --book.spellSlotsRemaining;
    // Will automatically invoke the code in the ObservableListener above
    ObserverDispatch.notifySubscribers(book);
    }
    }