com.lyonesgamer.propertygrid.properties.PasswordProperty 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 javax.swing.*;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import java.awt.*;
import java.util.*;
import java.util.List;
/**
* Like StringProperty but uses * to hide value.
*
* @author Tristan Patch
* @since 1.0
*/
public class PasswordProperty extends StringProperty {
/**
* The editor to use.
*/
protected PasswordEditor editor = new PasswordEditor();
/**
* Creates a new property.
*
* @param name The name of the property in the grid.
* @param value The initial value of the property.
*/
public PasswordProperty(String name, String value) {
super(name, value);
}
/**
* Returns a string of equal length to the value, but with the value replaced with asterisks to protect the password.
*
* @param value The value to be converted to a string.
* @return A protected string of the value.
*/
@Override
public String valueToString(String value) {
return value.replaceAll(".", "*");
}
@Override
public PGCellRenderer getRenderer() {
return renderer;
}
@Override
public PGCellEditor getEditor() {
return editor;
}
protected class PasswordEditor extends JPasswordField implements PGCellEditor {
//Unfortunately this code must be copied over line-by-line from StringEditor, because it needs to extend JPasswordField
//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()));
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() {
onSetValue(new String(this.getPassword()));
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();
}
}
}