/** * * Copyright * 2009-2015 Jayway Products AB * 2016-2017 Föreningen Sambruk * * Licensed under AGPL, Version 3.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.gnu.org/licenses/agpl.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package se.streamsource.streamflow.client.ui.account; import java.awt.Component; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.JTextComponent; /** * JAVADOC */ public class FormEditor { Component[] components; boolean editing = false; public FormEditor(Component... components) { this.components = components; init(components); view(); } private void init(Component... components) { for (Component component : components) { if (component instanceof JPanel) { init(((JPanel) component).getComponents()); } else if (component instanceof JLabel) { final JLabel label = (JLabel) component; label.addPropertyChangeListener("text", new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { setVisible(label, !(evt.getNewValue() == null || evt .getNewValue().equals(""))); } }); } else if (component instanceof JTextComponent) { final JTextComponent text = (JTextComponent) component; text.getDocument().addDocumentListener(new DocumentListener() { public void insertUpdate(DocumentEvent e) { changedUpdate(e); } public void removeUpdate(DocumentEvent e) { changedUpdate(e); } public void changedUpdate(DocumentEvent e) { if (!isEditing()) { if (text.getText().equals("")) { setVisible(text, false); } else { if (!text.isVisible()) { setVisible(text, true); } } } } }); } } } public boolean isEditing() { return editing; } public void view() { editing = false; view(components); } private void view(Component... components) { for (Component component : components) { if (component instanceof JPanel) { view(((JPanel) component).getComponents()); } else if (component instanceof JLabel) { // Do nothing } else if (component instanceof JComponent) { final JComponent text = (JComponent) component; text.setEnabled(false); } component.doLayout(); } } public void edit() { editing = true; edit(components); } private void edit(Component... components) { for (Component component : components) { if (component instanceof JPanel) { edit(((JPanel) component).getComponents()); } else if (component instanceof JLabel) { // Do nothing } else if (component instanceof JComponent) { final JComponent text = (JComponent) component; text.setEnabled(true); setVisible(component, true); } } } private void setVisible(Component component, boolean b) { component.setVisible(b); JLabel label = (JLabel) ((JComponent) component) .getClientProperty("labeledBy"); if (label != null) label.setVisible(b); } }