Bug 423148 - Swing: render AbstractLabelField not as JLabel

https://bugs.eclipse.org/bugs/show_bug.cgi?id=423148

Set correct colors when disabled/enabled. Backport from 4.0, original commit id was e3a5482bb9e46c869f333e631a8b1c5d17d4d294

Change-Id: I11e3bbfa9af71719d8922dcf29e1294501ad0cb4
Signed-off-by: Matthias Nick <Matthias.Nick@bsiag.com>
Reviewed-on: https://git.eclipse.org/r/23910
Tested-by: Hudson CI
diff --git a/org.eclipse.scout.rt.ui.swing.test/src/org/eclipse/scout/rt/ui/swing/form/fields/htmlfield/SwingScoutHtmlFieldUiTest.java b/org.eclipse.scout.rt.ui.swing.test/src/org/eclipse/scout/rt/ui/swing/form/fields/htmlfield/SwingScoutHtmlFieldUiTest.java
new file mode 100644
index 0000000..d124e6b
--- /dev/null
+++ b/org.eclipse.scout.rt.ui.swing.test/src/org/eclipse/scout/rt/ui/swing/form/fields/htmlfield/SwingScoutHtmlFieldUiTest.java
@@ -0,0 +1,112 @@
+package org.eclipse.scout.rt.ui.swing.form.fields.htmlfield;
+
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isA;
+import static org.easymock.EasyMock.replay;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.awt.Color;
+
+import org.eclipse.scout.rt.client.ui.form.fields.GridData;
+import org.eclipse.scout.rt.client.ui.form.fields.IFormField;
+import org.eclipse.scout.rt.client.ui.form.fields.htmlfield.IHtmlField;
+import org.eclipse.scout.rt.ui.swing.ISwingEnvironment;
+import org.eclipse.scout.rt.ui.swing.ext.JStatusLabelEx;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests for {@link SwingScoutHtmlField}
+ * 
+ * @since 4.0.0-M7 (backported)
+ */
+public class SwingScoutHtmlFieldUiTest {
+
+  private TestSwingScoutHtmlField m_htmlfield;
+  private TestSwingScoutHtmlEditorField m_htmlEditorField;
+
+  @Before
+  public void setup() {
+    m_htmlfield = new TestSwingScoutHtmlField();
+    m_htmlfield.initializeSwing();
+
+    m_htmlEditorField = new TestSwingScoutHtmlEditorField();
+    m_htmlEditorField.initializeSwing();
+  }
+
+  @Test
+  public void testForegroundColor() {
+    m_htmlfield.setEnabledFromScout(true);
+    Color foregroundColorEnabled = m_htmlfield.getSwingHtmlField().getForeground();
+    assertNotNull(foregroundColorEnabled);
+    m_htmlfield.setEnabledFromScout(false);
+    Color backgroundColorDisabled = m_htmlfield.getSwingHtmlField().getForeground();
+    assertNotNull(backgroundColorDisabled);
+    assertNotEquals("enabled foregroundColor should be different from disabled foregroundColor", foregroundColorEnabled, backgroundColorDisabled);
+  }
+
+  @Test
+  public void testForegroundColorHtmlEditorField() {
+    m_htmlEditorField.setEnabledFromScout(true);
+    Color foregroundColorEnabled = m_htmlEditorField.getSwingHtmlField().getForeground();
+    assertNotNull(foregroundColorEnabled);
+    m_htmlEditorField.setEnabledFromScout(false);
+    Color backgroundColorDisabled = m_htmlEditorField.getSwingHtmlField().getForeground();
+    assertNotNull(backgroundColorDisabled);
+    assertNotEquals("enabled foregroundColor should be different from disabled foregroundColor", foregroundColorEnabled, backgroundColorDisabled);
+  }
+
+  @Test
+  public void testJTextPaneSelectable() {
+    m_htmlfield.setEnabledFromScout(true);
+    assertTrue("The JTextPane must be selectable by the user", m_htmlfield.getSwingHtmlField().isEnabled());
+    assertFalse("The JTextPane should not be editable", m_htmlfield.getSwingHtmlField().isEditable());
+    m_htmlfield.setEnabledFromScout(false);
+    assertTrue("The JTextPane must be selectable by the user", m_htmlfield.getSwingHtmlField().isEnabled());
+    assertFalse("The JTextPane should not be editable", m_htmlfield.getSwingHtmlField().isEditable());
+
+    m_htmlEditorField.setEnabledFromScout(true);
+    assertTrue("The JTextPane must be selectable by the user", m_htmlEditorField.getSwingHtmlField().isEnabled());
+    assertTrue("The JTextPane should be editable", m_htmlEditorField.getSwingHtmlField().isEditable());
+    m_htmlEditorField.setEnabledFromScout(false);
+    assertTrue("The JTextPane must be selectable by the user", m_htmlEditorField.getSwingHtmlField().isEnabled());
+    assertTrue("The JTextPane should be editable", m_htmlEditorField.getSwingHtmlField().isEditable());
+  }
+
+  private static class TestSwingScoutHtmlField extends SwingScoutHtmlField {
+
+    @Override
+    public IHtmlField getScoutObject() {
+      IHtmlField scoutObject = createNiceMock(IHtmlField.class);
+      expect(scoutObject.isHtmlEditor()).andReturn(false);
+      expect(scoutObject.getGridData()).andReturn(new GridData(0, 0, 0, 0, 0, 0));
+      replay(scoutObject);
+      return scoutObject;
+    }
+
+    @Override
+    public ISwingEnvironment getSwingEnvironment() {
+      ISwingEnvironment environment = createNiceMock(ISwingEnvironment.class);
+      expect(environment.createStatusLabel(isA(IFormField.class))).andReturn(new JStatusLabelEx());
+      replay(environment);
+      return environment;
+    }
+  }
+
+  private static class TestSwingScoutHtmlEditorField extends TestSwingScoutHtmlField {
+
+    @Override
+    public IHtmlField getScoutObject() {
+      IHtmlField scoutObject = createNiceMock(IHtmlField.class);
+      expect(scoutObject.isHtmlEditor()).andReturn(true);
+      expect(scoutObject.getGridData()).andReturn(new GridData(0, 0, 0, 0, 0, 0));
+      replay(scoutObject);
+      return scoutObject;
+    }
+  }
+
+}
diff --git a/org.eclipse.scout.rt.ui.swing.test/src/org/eclipse/scout/rt/ui/swing/form/fields/labelfield/SwingScoutLabelFieldTest.java b/org.eclipse.scout.rt.ui.swing.test/src/org/eclipse/scout/rt/ui/swing/form/fields/labelfield/SwingScoutLabelFieldTest.java
deleted file mode 100644
index fd39aed..0000000
--- a/org.eclipse.scout.rt.ui.swing.test/src/org/eclipse/scout/rt/ui/swing/form/fields/labelfield/SwingScoutLabelFieldTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.eclipse.scout.rt.ui.swing.form.fields.labelfield;
-
-import static org.junit.Assert.assertTrue;
-
-import javax.swing.JComponent;
-import javax.swing.JTextPane;
-
-import org.easymock.EasyMock;
-import org.eclipse.scout.rt.client.ui.form.fields.GridData;
-import org.eclipse.scout.rt.client.ui.form.fields.labelfield.ILabelField;
-import org.eclipse.scout.rt.ui.swing.ext.JTextPaneEx;
-import org.eclipse.scout.rt.ui.swing.text.HTMLStyledTextCreator;
-import org.eclipse.scout.rt.ui.swing.text.IStyledTextCreator;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Tests for {@link SwingScoutLabelField}
- * 
- * @since 3.10.0-M5
- */
-public class SwingScoutLabelFieldTest {
-
-  private TestSwingScoutLabelField label;
-
-  @Before
-  public void setup() {
-    label = new TestSwingScoutLabelField();
-    label.setSwingField(label.createLabelField());
-  }
-
-  @Test
-  public void testNoWrapText() throws Exception {
-    label.setTextWrapFromScout(false);
-    String text = ((JTextPane) label.getSwingField()).getText();
-    assertTrue(text.contains("white-space: nowrap"));
-
-    label.setTextWrapFromScout(true);
-    text = ((JTextPane) label.getSwingField()).getText();
-    assertTrue(text.contains("white-space: normal"));
-  }
-
-  @Test
-  public void testVerticalAlignment() {
-    label.setVerticalAlignmentFromScout(0);
-    String text = ((JTextPane) label.getSwingField()).getText();
-    assertTrue(text.contains("valign=\"middle\""));
-
-    label.setVerticalAlignmentFromScout(-1);
-    text = ((JTextPane) label.getSwingField()).getText();
-    assertTrue(text.contains("valign=\"top\""));
-
-    label.setVerticalAlignmentFromScout(1);
-    text = ((JTextPane) label.getSwingField()).getText();
-    assertTrue(text.contains("valign=\"bottom\""));
-  }
-
-  @Test
-  public void testHorizontalAlignment() {
-    label.setHorizontalAlignmentFromScout(-1);
-    String text = ((JTextPane) label.getSwingField()).getText();
-    assertTrue(text.contains("align=\"left\""));
-
-    label.setHorizontalAlignmentFromScout(0);
-    text = ((JTextPane) label.getSwingField()).getText();
-    assertTrue(text.contains("align=\"center\""));
-
-    label.setHorizontalAlignmentFromScout(1);
-    text = ((JTextPane) label.getSwingField()).getText();
-    assertTrue(text.contains("align=\"right\""));
-  }
-
-  private static class TestSwingScoutLabelField extends SwingScoutLabelField {
-
-    private IStyledTextCreator m_styledTextCreator = new HTMLStyledTextCreator();
-
-    @Override
-    public void setSwingField(JComponent swingField) {
-      super.setSwingField(swingField);
-    }
-
-    @Override
-    public JTextPaneEx createLabelField() {
-      return super.createLabelField();
-    }
-
-    @Override
-    protected void setTextWrapFromScout(boolean b) {
-      super.setTextWrapFromScout(b);
-    }
-
-    @Override
-    public ILabelField getScoutObject() {
-      ILabelField scoutObject = EasyMock.createNiceMock(ILabelField.class);
-      EasyMock.expect(scoutObject.getGridData()).andReturn(new GridData(0, 0, 0, 0, 0, 0));
-      EasyMock.replay(scoutObject);
-      return scoutObject;
-    }
-
-    @Override
-    public IStyledTextCreator getStyledTextCreator() {
-      return m_styledTextCreator;
-    }
-  }
-
-}
diff --git a/org.eclipse.scout.rt.ui.swing.test/src/org/eclipse/scout/rt/ui/swing/form/fields/labelfield/SwingScoutLabelFieldUiTest.java b/org.eclipse.scout.rt.ui.swing.test/src/org/eclipse/scout/rt/ui/swing/form/fields/labelfield/SwingScoutLabelFieldUiTest.java
new file mode 100644
index 0000000..5c0a6e1
--- /dev/null
+++ b/org.eclipse.scout.rt.ui.swing.test/src/org/eclipse/scout/rt/ui/swing/form/fields/labelfield/SwingScoutLabelFieldUiTest.java
@@ -0,0 +1,155 @@
+package org.eclipse.scout.rt.ui.swing.form.fields.labelfield;
+
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isA;
+import static org.easymock.EasyMock.replay;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.awt.Color;
+
+import javax.swing.JComponent;
+import javax.swing.JTextPane;
+
+import org.eclipse.scout.rt.client.ui.form.fields.GridData;
+import org.eclipse.scout.rt.client.ui.form.fields.IFormField;
+import org.eclipse.scout.rt.client.ui.form.fields.labelfield.ILabelField;
+import org.eclipse.scout.rt.ui.swing.ISwingEnvironment;
+import org.eclipse.scout.rt.ui.swing.ext.JStatusLabelEx;
+import org.eclipse.scout.rt.ui.swing.text.HTMLStyledTextCreator;
+import org.eclipse.scout.rt.ui.swing.text.IStyledTextCreator;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests for {@link SwingScoutLabelField}
+ *
+ * @since 3.10.0-M5
+ */
+public class SwingScoutLabelFieldUiTest {
+
+  private static final int LABEL_HORIZONTAL_ALIGNMENT_LEFT = -1;
+  private static final int LABEL_HORIZONTAL_ALIGNMENT_CENTER = 0;
+  private static final int LABEL_HORIZONTAL_ALIGNMENT_RIGHT = 1;
+  private static final int LABEL_VERTICAL_ALIGNMENT_TOP = -1;
+  private static final int LABEL_VERTICAL_ALIGNMENT_MIDDLE = 0;
+  private static final int LABEL_VERTICAL_ALIGNMENT_BOTTOM = 1;
+
+  private TestSwingScoutLabelField m_label;
+
+  @Before
+  public void setup() {
+    m_label = new TestSwingScoutLabelField();
+    m_label.setSwingField(m_label.createLabelField());
+    m_label.initializeSwing();
+  }
+
+  @Test
+  public void testNoWrapText() throws Exception {
+    m_label.setTextWrapFromScout(false);
+    String text = ((JTextPane) m_label.getSwingField()).getText();
+    assertTrue(text.contains("white-space: nowrap"));
+
+    m_label.setTextWrapFromScout(true);
+    text = ((JTextPane) m_label.getSwingField()).getText();
+    assertTrue(text.contains("white-space: normal"));
+  }
+
+  @Test
+  public void testVerticalAlignment() {
+    m_label.setVerticalAlignmentFromScout(LABEL_VERTICAL_ALIGNMENT_MIDDLE);
+    String text = ((JTextPane) m_label.getSwingField()).getText();
+    assertTrue(text.contains("valign=\"middle\""));
+
+    m_label.setVerticalAlignmentFromScout(LABEL_VERTICAL_ALIGNMENT_TOP);
+    text = ((JTextPane) m_label.getSwingField()).getText();
+    assertTrue(text.contains("valign=\"top\""));
+
+    m_label.setVerticalAlignmentFromScout(LABEL_VERTICAL_ALIGNMENT_BOTTOM);
+    text = ((JTextPane) m_label.getSwingField()).getText();
+    assertTrue(text.contains("valign=\"bottom\""));
+  }
+
+  @Test
+  public void testHorizontalAlignment() {
+    m_label.setHorizontalAlignmentFromScout(LABEL_HORIZONTAL_ALIGNMENT_LEFT);
+    String text = ((JTextPane) m_label.getSwingField()).getText();
+    assertTrue(text.contains("align=\"left\""));
+
+    m_label.setHorizontalAlignmentFromScout(LABEL_HORIZONTAL_ALIGNMENT_CENTER);
+    text = ((JTextPane) m_label.getSwingField()).getText();
+    assertTrue(text.contains("align=\"center\""));
+
+    m_label.setHorizontalAlignmentFromScout(LABEL_HORIZONTAL_ALIGNMENT_RIGHT);
+    text = ((JTextPane) m_label.getSwingField()).getText();
+    assertTrue(text.contains("align=\"right\""));
+  }
+
+  @Test
+  public void testForegroundColor() {
+    m_label.setEnabledFromScout(true);
+    Color enabledForegroundColor = m_label.getSwingLabelField().getForeground();
+    assertNotNull(enabledForegroundColor);
+
+    m_label.setEnabledFromScout(false);
+    Color disabledForegroundColor = m_label.getSwingLabelField().getForeground();
+    assertNotNull(disabledForegroundColor);
+
+    assertNotEquals("enabled foregroundColor should be different from disabled foregroundColor", enabledForegroundColor, disabledForegroundColor);
+  }
+
+  @Test
+  public void testSelectable() {
+    m_label.setEnabledFromScout(true);
+    assertTrue("JTextPaneEx should be enabled, otherwise text selecion is not possible", m_label.getSwingLabelField().isEnabled());
+    m_label.setEnabledFromScout(false);
+    assertTrue("JTextPaneEx should be enabled, otherwise text selecion is not possible", m_label.getSwingLabelField().isEnabled());
+
+    m_label.setSelectableFromScout(true);
+    assertNotNull(m_label.getSwingLabelField().getHighlighter());
+    assertNotNull(m_label.getSwingLabelField().getTransferHandler());
+
+    m_label.setSelectableFromScout(false);
+    assertNull(m_label.getSwingLabelField().getHighlighter());
+    assertNull(m_label.getSwingLabelField().getTransferHandler());
+
+    m_label.setSelectableFromScout(true);
+    assertNotNull(m_label.getSwingLabelField().getHighlighter());
+    assertNotNull(m_label.getSwingLabelField().getTransferHandler());
+  }
+
+  private static class TestSwingScoutLabelField extends SwingScoutLabelField {
+
+    private IStyledTextCreator m_styledTextCreator = new HTMLStyledTextCreator();
+
+    @Override
+    public void setSwingField(JComponent swingField) {
+      super.setSwingField(swingField);
+    }
+
+    @Override
+    public ILabelField getScoutObject() {
+      ILabelField scoutObject = createNiceMock(ILabelField.class);
+      expect(scoutObject.getGridData()).andReturn(new GridData(0, 0, 0, 0, 0, 0));
+      replay(scoutObject);
+      return scoutObject;
+    }
+
+    @Override
+    public ISwingEnvironment getSwingEnvironment() {
+      ISwingEnvironment environment = createNiceMock(ISwingEnvironment.class);
+      expect(environment.createStatusLabel(isA(IFormField.class))).andReturn(new JStatusLabelEx());
+      replay(environment);
+      return environment;
+    }
+
+    @Override
+    public IStyledTextCreator getStyledTextCreator() {
+      return m_styledTextCreator;
+    }
+  }
+
+}
diff --git a/org.eclipse.scout.rt.ui.swing.test/src/org/eclipse/scout/rt/ui/swing/form/fields/mailfield/SwingScoutMailFieldUiTest.java b/org.eclipse.scout.rt.ui.swing.test/src/org/eclipse/scout/rt/ui/swing/form/fields/mailfield/SwingScoutMailFieldUiTest.java
new file mode 100644
index 0000000..3f273c7
--- /dev/null
+++ b/org.eclipse.scout.rt.ui.swing.test/src/org/eclipse/scout/rt/ui/swing/form/fields/mailfield/SwingScoutMailFieldUiTest.java
@@ -0,0 +1,77 @@
+package org.eclipse.scout.rt.ui.swing.form.fields.mailfield;
+
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isA;
+import static org.easymock.EasyMock.replay;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.awt.Color;
+
+import org.eclipse.scout.rt.client.ui.form.fields.GridData;
+import org.eclipse.scout.rt.client.ui.form.fields.IFormField;
+import org.eclipse.scout.rt.client.ui.form.fields.mailfield.IMailField;
+import org.eclipse.scout.rt.ui.swing.ISwingEnvironment;
+import org.eclipse.scout.rt.ui.swing.ext.JStatusLabelEx;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests for {@link SwingScoutMailFieldField}
+ * 
+ * @since 4.0.0-M7 (backported)
+ */
+public class SwingScoutMailFieldUiTest {
+
+  private TestSwingScoutMailField m_mailfield;
+
+  @Before
+  public void setup() {
+    m_mailfield = new TestSwingScoutMailField();
+    m_mailfield.initializeSwing();
+  }
+
+  @Test
+  public void testForegroundColor() {
+    m_mailfield.setEnabledFromScout(true);
+    Color foregroundColorEnabled = m_mailfield.getSwingMailField().getForeground();
+    assertNotNull(foregroundColorEnabled);
+    m_mailfield.setEnabledFromScout(false);
+    Color backgroundColorDisabled = m_mailfield.getSwingMailField().getForeground();
+    assertNotNull(backgroundColorDisabled);
+    assertNotEquals("enabled foregroundColor should be different from disabled foregroundColor", foregroundColorEnabled, backgroundColorDisabled);
+  }
+
+  @Test
+  public void testJTextPaneSelectable() {
+    m_mailfield.setEnabledFromScout(true);
+    assertTrue("The JTextPane must be selectable by the user", m_mailfield.getSwingMailField().isEnabled());
+    assertFalse("The JTextPane should not be editable", m_mailfield.getSwingMailField().isEditable());
+    m_mailfield.setEnabledFromScout(false);
+    assertTrue("The JTextPane must be selectable by the user", m_mailfield.getSwingMailField().isEnabled());
+    assertFalse("The JTextPane should not be editable", m_mailfield.getSwingMailField().isEditable());
+  }
+
+  private static class TestSwingScoutMailField extends SwingScoutMailField {
+
+    @Override
+    public IMailField getScoutObject() {
+      IMailField scoutObject = createNiceMock(IMailField.class);
+      expect(scoutObject.isMailEditor()).andReturn(false);
+      expect(scoutObject.getGridData()).andReturn(new GridData(0, 0, 0, 0, 0, 0));
+      replay(scoutObject);
+      return scoutObject;
+    }
+
+    @Override
+    public ISwingEnvironment getSwingEnvironment() {
+      ISwingEnvironment environment = createNiceMock(ISwingEnvironment.class);
+      expect(environment.createStatusLabel(isA(IFormField.class))).andReturn(new JStatusLabelEx());
+      replay(environment);
+      return environment;
+    }
+  }
+}
diff --git a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/ext/JTextPaneEx.java b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/ext/JTextPaneEx.java
index a5b4224..a1be1f8 100644
--- a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/ext/JTextPaneEx.java
+++ b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/ext/JTextPaneEx.java
@@ -4,7 +4,7 @@
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  *     BSI Business Systems Integration AG - initial API and implementation
  ******************************************************************************/
@@ -23,18 +23,21 @@
 
   private static final long serialVersionUID = 1L;
 
+  /**
+   * This property is set from the Scout Model. It will determine the foreground color of the JTextPane. If
+   * <code>true</code> the default text color will be shown, if <code>false</code> the disabled text color will be
+   * shown.
+   */
+  private boolean m_enabledFromScout;
+
   public JTextPaneEx() {
     super();
+    setEnabled(true);
   }
 
-  /**
-   * Deep inside swing the text field editor View.class is only checking for
-   * isEnable() This is not changeable by a LookAndFeel. This is handled in the
-   * corresponding ...Ex sub classes of JTextComponent
-   */
   @Override
   public Color getForeground() {
-    if (isEditable()) {
+    if (m_enabledFromScout) {
       return super.getForeground();
     }
     else {
@@ -55,6 +58,20 @@
   }
 
   @Override
+  public void setEnabled(boolean enabled) {
+    m_enabledFromScout = enabled;
+  }
+
+  /**
+   * Always return <code>true</code> so that the JTextPane stays selectable. If we would return <code>false</code> the
+   * JTextPane's content would not be selectable anymore
+   */
+  @Override
+  public boolean isEnabled() {
+    return true;
+  }
+
+  @Override
   public Point getToolTipLocation(MouseEvent e) {
     return SwingUtility.getAdjustedToolTipLocation(e, this, getTopLevelAncestor());
   }
diff --git a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/form/fields/htmlfield/SwingScoutHtmlField.java b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/form/fields/htmlfield/SwingScoutHtmlField.java
index c935225..cdbfba6 100644
--- a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/form/fields/htmlfield/SwingScoutHtmlField.java
+++ b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/form/fields/htmlfield/SwingScoutHtmlField.java
@@ -295,6 +295,7 @@
   protected void setEnabledFromScout(boolean b) {
     super.setEnabledFromScout(b);
     m_htmlView.setEditable(getScoutObject().isHtmlEditor());
+    m_htmlView.setEnabled(b);
     if (m_htmlView.getCaret() instanceof DefaultCaret) {
       // enable / disable caret update according to editability.
       ((DefaultCaret) m_htmlView.getCaret()).setUpdatePolicy(getScoutObject().isHtmlEditor() ? DefaultCaret.UPDATE_WHEN_ON_EDT : DefaultCaret.NEVER_UPDATE);
diff --git a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/form/fields/labelfield/SwingScoutLabelField.java b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/form/fields/labelfield/SwingScoutLabelField.java
index aaa83eb..67202fb 100644
--- a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/form/fields/labelfield/SwingScoutLabelField.java
+++ b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/form/fields/labelfield/SwingScoutLabelField.java
@@ -97,6 +97,7 @@
   protected void setEnabledFromScout(boolean b) {
     super.setEnabledFromScout(b);
     getSwingLabelField().setEditable(false); //JTextPane is never editable!
+    getSwingLabelField().setEnabled(b);
     updateTextInGUI();
   }
 
diff --git a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/form/fields/mailfield/SwingScoutMailField.java b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/form/fields/mailfield/SwingScoutMailField.java
index 70e54e0..c6bd5f0 100644
--- a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/form/fields/mailfield/SwingScoutMailField.java
+++ b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/form/fields/mailfield/SwingScoutMailField.java
@@ -435,6 +435,7 @@
   protected void setEnabledFromScout(boolean b) {
     // super.setEnabledFromScout(b);
     m_htmlView.setEditable(getScoutObject().isMailEditor());
+    m_htmlView.setEnabled(b);
   }
 
   protected void setAddressesFromScout(Address[] addresses, String addressKey, boolean invisibleWhenEmpty) {