package org.nlamah.QL.View.Form.Abstract; import java.awt.Dimension; import java.awt.Font; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JLabel; import javax.swing.SwingConstants; import javax.swing.text.View; import org.nlamah.QBase.Constants.UIConstants; import org.nlamah.QBase.Tools.StringTools; import org.nlamah.QL.Model.Form.Abstract.FormQuestion; @SuppressWarnings("serial") public class QuestionView extends FormElementView { protected JLabel questionLabel; protected WidgetView widgetView; protected int viewWidth; public QuestionView(FormQuestion question, WidgetView widgetView) { super(question); this.widgetView = widgetView; initializeComponents(); addComponentsToView(); layoutView(); fillInQuestionString(question.questionText().toString()); } public FormQuestion question() { return (FormQuestion) modelElement; } public WidgetView widgetView() { return widgetView; } private void fillInQuestionString(String questionString) { questionLabel.setText(StringTools.surroundStringWithHtmlTags(questionString)); layoutView(); } @Override public void layoutView() { setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS)); View view = (View) javax.swing.plaf.basic.BasicHTML.createHTMLView(questionLabel, questionLabel.getText()); view.setSize(viewWidth - UIConstants.widgetWidth() - UIConstants.widgetRightMargin() - UIConstants.labelLeftMargin() - UIConstants.labelRightMargin(), Integer.MAX_VALUE); int height = (int) view.getPreferredSpan(View.Y_AXIS); height += UIConstants.labelTopMargin() + UIConstants.labelBottomMargin(); widgetView.layoutView(); height = Math.max(height, widgetView.getPreferredSize().height); setPreferredSize(new Dimension(viewWidth, height)); setMaximumSize(getPreferredSize()); setMinimumSize(getPreferredSize()); widgetView.setPreferredSize(new Dimension(UIConstants.widgetWidth(), height)); widgetView.setMinimumSize(widgetView.getPreferredSize()); widgetView.setMaximumSize(widgetView.getPreferredSize()); } @Override public void initializeComponents() { questionLabel = new JLabel(); questionLabel.setHorizontalAlignment(SwingConstants.RIGHT); questionLabel.setFont(new Font("TimesRoman", Font.ITALIC, 15)); viewWidth = UIConstants.contentWidth(); } @Override public void addComponentsToView() { add(Box.createRigidArea(new Dimension(UIConstants.labelLeftMargin(), 0))); add(questionLabel); add(Box.createRigidArea(new Dimension(UIConstants.labelRightMargin(), 0))); add(widgetView); add(Box.createRigidArea(new Dimension(UIConstants.widgetRightMargin(), 0))); } }