Ich bin auf der Suche nach einem Graphen-Reader-Programm, das jeden gescannten Graphen und konvertieren Sie seine Werte in eine CSV mit wenig Aufwand. Das folgende Diagramm beschreibt die grundlegende Steuerung fließenPflegen und steuern GUI Zustände und Unterzustände
ich einen Prototyp haben und läuft, die meine grundlegenden Anforderungen erfüllt, aber bevor mit Entwicklung fortfahren Ich möchte der beste Weg, wissen, GUI Staaten und substates zu halten . Im Moment bin ich mit einem Enum:
public enum UIState {
MAKING_SELECTION, SELECTING_AXIS_POINTS, SETTING_VALUES, SELECTING_GRAPH_POINTS
}
Der Controller verfügt über eine UIState
, die durch den Aufruf von Tasten und Maus Zuhörer eingestellt werden kann
public void setUiState(UIState uiState) {
switch (this.uiState = uiState) {
case MAKING_SELECTION:
frame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
break;
case SELECTING_AXIS_POINTS:
clearSelection();
frame.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
break;
case SETTING_VALUES:
clearSelection();
break;
case SELECTING_GRAPH_POINTS:
frame.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
clearSelection();
break;
}
updateView(); //Repaints frame
setChanged();
notifyObservers(uiState);
}
Mein OptionsPanel, das Panel, das alle Tasten enthält und Eingangs Felder, beobachtet die Steuerung und ruft einen großen Schalter, wenn es ändern beobachtet:
@Override
public void update(Observable o, Object arg) {
if (arg instanceof UIState) {
switch ((UIState)arg) {
case MAKING_SELECTION:
//Set component statuses
break;
case SELECTING_AXIS_POINTS:
//Set component statuses
break;
case SETTING_VALUES:
//Set component statuses
break;
case SELECTING_GRAPH_POINTS:
//Set component statuses
break;
}
}
}
die Einstellung der Komponenten wird nur getan, indemAufrufauf jedem einzelnen meiner Buttons und Textfelder, was schon mit einer kleinen Anzahl von Komponenten unklar wird. Meine Maushörer haben auch ähnliche Schalter zusätzlich zu den isLeftMouseButton()
und isRightMouseButton()
Abfragen, die das Ganze wirklich verwirrend machen.
Meine Implementierung enthält nicht einmal Unterzustände und obwohl ich es irgendwie funktioniert habe, gibt es bereits Inkonsistenz mit der Einstellung des Cursors.
Meine Frage ist also: Gibt es eine bessere Lösung für die Verwaltung dieser GUI-Status und Unterzustände und setzen Sie den UI-Komponentenstatus auf Benutzereingaben, vor allem eine, die mehr Konsistenz erleichtert?
Nizza bearbeiten. Plus one .. –
Vielleicht in das State Design Pattern schauen? http://en.wikipedia.org/wiki/State_pattern –
@MattCoubrough also, wenn ich richtig verstanden habe, würde ich eine Schnittstelle irgendeiner Art haben, die abstrakte Methoden wie 'getCursor()' oder 'changePanelCompStates (OptionPanel-Gremium)' haben würde könnte durch ui State-Klassen implementiert werden. Wie hätte ich allerdings Input-Listener bekommen? Würde jede dieser Zustandsklassen ihre eigenen Listener haben, die zu meinem Panel hinzugefügt oder von diesem entfernt würden, wenn sich der Zustand ändert? – Marv