com.lyonesgamer.propertygrid.properties.StringProperty Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of JPropertyGrid Show documentation
Show all versions of JPropertyGrid Show documentation
A property editor component for Swing.
The newest version!
package com.lyonesgamer.propertygrid.properties;
import com.lyonesgamer.propertygrid.PGProperty;
import javax.swing.*;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import java.awt.*;
import java.util.*;
import java.util.List;
/**
* A simple String property.
*
* @author Tristan Patch
* @since 1.0
*/
public class StringProperty extends PGProperty {
/**
* The value of the property.
*/
protected String value;
/**
* The editor to use.
*/
protected StringEditor editor = new StringEditor();
/**
* The renderer to use.
*/
protected StringRenderer renderer = new StringRenderer();
/**
* Creates a new property.
*
* @param name The name of the property in the grid.
* @param value The initial value of the property.
*/
public StringProperty(String name, String value) {
super(name);
this.value = value;
}
@Override
protected void doAfterAdded() {}
@Override
public boolean onValidateValue(String value) {
return true;
}
@Override
public void onSetValue(String value) {
if (parent != null)
parent.firePropertyChangeEvent(this, value);
this.value = value;
}
@Override
public void setValueFromString(String value) {
setValue(value);
}
@Override
public void setValueFromLong(long value) {
setValue(Long.toString(value));
}
@Override
public String getValue() {
return value;
}
@Override
public String stringToValue(String value) {
return value;
}
@Override
public String longToValue(long value) {
return Long.toString(value);
}
@Override
public String valueToString(String value) {
return value;
}
@Override
public PGCellRenderer getRenderer() {
return renderer;
}
@Override
public PGCellEditor getEditor() {
return editor;
}
protected class StringEditor extends JTextField implements PGCellEditor {
//No need to use an EventListenerList if we only have one listener type
protected final List listeners = new ArrayList<>();
protected final Set listenersToRemove = new HashSet<>();
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
this.setText(valueToString(getValue()));
this.setEnabled(!disabled);
return this;
}
@Override
public Object getCellEditorValue() {
return valueToString(getValue());
}
@Override
public boolean isCellEditable(EventObject anEvent) {
return !disabled;
}
@Override
public boolean shouldSelectCell(EventObject anEvent) {
return true;
}
@Override
public boolean stopCellEditing() {
value = this.getText();
fireEditingStopped();
return true;
}
@Override
public void cancelCellEditing() {
fireEditingCancelled();
}
public void fireEditingCancelled() {
ChangeEvent event = new ChangeEvent(this);
for (CellEditorListener l : listeners)
l.editingCanceled(event);
doClearListeners();
}
public void fireEditingStopped() {
ChangeEvent event = new ChangeEvent(this);
for (CellEditorListener l : listeners)
l.editingStopped(event);
doClearListeners();
}
@Override
public void addCellEditorListener(CellEditorListener l) {
listeners.add(l);
}
@Override
public void removeCellEditorListener(CellEditorListener l) {
listenersToRemove.add(l);
}
protected void doClearListeners() {
listeners.removeAll(listenersToRemove);
listenersToRemove.clear();
}
}
protected class StringRenderer extends JLabel implements PGCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
setText(valueToString(getValue()));
setToolTipText(helpString);
return this;
}
}
}