
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