All Downloads are FREE. Search and download functionalities are using the official Maven repository.

se.wfh.libs.common.gui.widgets.WTextArea Maven / Gradle / Ivy

package se.wfh.libs.common.gui.widgets;

import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;

import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

import se.wfh.libs.common.gui.exceptions.ChangeVetoException;
import se.wfh.libs.common.gui.widgets.base.AbstractWComponent;

public class WTextArea extends AbstractWComponent {
	private static final long serialVersionUID = 1L;

	public WTextArea() {
		this(null);
	}

	public WTextArea(final String defval) {
		this(defval, 4, 15);
	}

	public WTextArea(final String defval, final int rows, final int columns) {
		super(new JTextArea(defval, rows, columns), defval);

		JTextArea myComponent = getComponent();

		// Set the value when leaving the field
		myComponent.addFocusListener(new FocusAdapter() {
			@Override
			public void focusGained(FocusEvent event) {
				SwingUtilities.invokeLater(() -> myComponent
						.setSelectionStart(myComponent.getText().length()));
			};

			@Override
			public void focusLost(FocusEvent event) {
				SwingUtilities.invokeLater(() -> setValueFromEvent());
			};
		});
	}

	@Override
	protected void currentValueChanging(String newVal) throws ChangeVetoException {
		getComponent().setText(newVal);
	}

	@Override
	public boolean isReadonly() {
		return !getComponent().isEditable();
	}

	@Override
	public void setReadonly(boolean readonly) {
		getComponent().setEditable(!readonly);
	}

	private void setValueFromEvent() {
		JTextArea component = getComponent();

		if (component.getText().isEmpty()) {
			setValue(null);
		} else {
			setValue(component.getText());
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy