package org.uva.student.calinwouter.qlqls.qls.widgets.computedvalue; import org.uva.student.calinwouter.qlqls.ql.model.StateWrapper; import org.uva.student.calinwouter.qlqls.ql.gui.widgets.IWidget; import org.uva.student.calinwouter.qlqls.ql.interfaces.ChangedStateEventListener; import org.uva.student.calinwouter.qlqls.ql.model.VariableTable; import javax.swing.*; import java.awt.*; /** * This widget is used for displaying the value of a computed value field. */ public class LabelWidget implements IWidget { private final String questionIdentifier; private final StateWrapper stateWrapper; private final JLabel valueLabel; private String createNotSetText() { return "-"; } private String createText(VariableTable variableTable, String questionIdentifier) { if (variableTable.isSet(questionIdentifier)) { return variableTable.getVariable(questionIdentifier).toString(); } return createNotSetText(); } private ChangedStateEventListener createChangedStateEventListener() { return new ChangedStateEventListener() { public void onStateChanged() { VariableTable variableTable = stateWrapper.getVariableTable(); valueLabel.setText(createText(variableTable, questionIdentifier)); valueLabel.revalidate(); } }; } public LabelWidget(String questionIdentifier, StateWrapper stateWrapper) { this.questionIdentifier = questionIdentifier; this.stateWrapper = stateWrapper; this.valueLabel = new JLabel(); final ChangedStateEventListener textboxChangedStateEventListener = createChangedStateEventListener(); stateWrapper.subscribeChangedStateEventListener(textboxChangedStateEventListener); } public Component getWidgetComponent() { return valueLabel; } public void resetValue() { valueLabel.setText(createNotSetText()); } }