|
|
6 лет назад | |
|---|---|---|
| src | 6 лет назад | |
| .gitignore | 8 лет назад | |
| LICENSE | 8 лет назад | |
| README.md | 6 лет назад | |
| pom.xml | 8 лет назад |
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.
mvn install<dependency>
<groupId>org.leumasjaffe</groupId>
<artifactId>observable</artifactId>
</dependency>
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);
}
}