label has editable font

This commit is contained in:
bancika
2011-02-27 21:56:08 +00:00
parent e2da0b884d
commit 401f2b5e6f
7 changed files with 120 additions and 36 deletions
@@ -2,6 +2,7 @@ package org.diylc.swing.gui.editor;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.Font;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import javax.swing.JLabel; import javax.swing.JLabel;
@@ -45,6 +46,15 @@ public class FieldEditorFactory {
BooleanEditor editor = new BooleanEditor(property); BooleanEditor editor = new BooleanEditor(property);
return editor; return editor;
} }
if (Font.class.isAssignableFrom(property.getType())) {
FontEditor editor = new FontEditor(property);
return editor;
}
if (Integer.class.isAssignableFrom(property.getType())
|| int.class.isAssignableFrom(property.getType())) {
IntEditor editor = new IntEditor(property);
return editor;
}
LOG.error("Unrecognized parameter type: " + property.getType().getName()); LOG.error("Unrecognized parameter type: " + property.getType().getName());
return new JLabel("Unrecognized"); return new JLabel("Unrecognized");
} }
@@ -1,51 +1,33 @@
package org.diylc.swing.gui.editor; package org.diylc.swing.gui.editor;
import java.awt.Color; import java.awt.Font;
import java.awt.Cursor; import java.awt.event.ItemEvent;
import java.awt.event.MouseAdapter; import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JColorChooser;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import org.diylc.common.PropertyWrapper; import org.diylc.common.PropertyWrapper;
import com.diyfever.gui.FontChooserComboBox;
public class FontEditor extends JLabel { public class FontEditor extends FontChooserComboBox {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public FontEditor(final PropertyWrapper property) { private final PropertyWrapper property;
super("Click to edit");
setOpaque(true); public FontEditor(PropertyWrapper property) {
setHorizontalAlignment(SwingConstants.CENTER); this.property = property;
setBorder(BorderFactory.createEtchedBorder()); setSelectedItem(((Font) property.getValue()).getName());
setBackground((Color) property.getValue()); addItemListener(new ItemListener() {
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
addMouseListener(new MouseAdapter() {
@Override @Override
public void mouseClicked(MouseEvent e) { public void itemStateChanged(ItemEvent e) {
// JFo if (e.getStateChange() == ItemEvent.SELECTED) {
Color newColor = JColorChooser.showDialog(FontEditor.this, "Choose Color", Font oldFont = (Font) FontEditor.this.property.getValue();
getBackground()); Font newFont = new Font(getSelectedItem().toString(), oldFont.getStyle(),
if (newColor != null) { oldFont.getSize());
property.setValue(newColor); FontEditor.this.property.setValue(newFont);
setBackground(newColor);
} }
} }
}); });
} }
@Override
public void setBackground(Color bg) {
if (bg.getRed() < 127 || bg.getBlue() < 127 || bg.getGreen() < 127) {
setForeground(Color.white);
} else {
setForeground(Color.black);
}
super.setBackground(bg);
}
} }
@@ -0,0 +1,26 @@
package org.diylc.swing.gui.editor;
import java.awt.BorderLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.diylc.common.PropertyWrapper;
import com.diyfever.gui.DoubleTextField;
public class IntEditor extends DoubleTextField {
private static final long serialVersionUID = 1L;
public IntEditor(final PropertyWrapper property) {
setLayout(new BorderLayout());
setValue((double) (Integer) property.getValue());
addPropertyChangeListener(DoubleTextField.VALUE_PROPERTY, new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
property.setValue(((Double) evt.getNewValue()).intValue());
}
});
}
}
@@ -302,6 +302,10 @@
<changeType>NEW_FEATURE</changeType> <changeType>NEW_FEATURE</changeType>
<description>Vertical vero board</description> <description>Vertical vero board</description>
</com.diyfever.gui.update.Change> </com.diyfever.gui.update.Change>
<com.diyfever.gui.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>Label has editable font</description>
</com.diyfever.gui.update.Change>
</changes> </changes>
<url>http://code.google.com/p/diy-layout-creator/downloads/list</url> <url>http://code.google.com/p/diy-layout-creator/downloads/list</url>
</com.diyfever.gui.update.Version> </com.diyfever.gui.update.Version>
@@ -12,7 +12,6 @@ import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent; import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver; import org.diylc.core.IDrawingObserver;
import org.diylc.core.Project; import org.diylc.core.Project;
import org.diylc.core.Theme;
import org.diylc.core.VisibilityPolicy; import org.diylc.core.VisibilityPolicy;
import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.ComponentDescriptor;
import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.EditableProperty;
@@ -73,6 +72,69 @@ public class Label extends AbstractComponent<Void> {
g2d.drawString("Abc", x, y); g2d.drawString("Abc", x, y);
} }
@EditableProperty
public Font getFont() {
return font;
}
public void setFont(Font font) {
this.font = font;
}
// Bold and italic fields are named to be alphabetically after Font. This is
// important!
@EditableProperty(name = "Font Bold")
public boolean getBold() {
return font.isBold();
}
public void setBold(boolean bold) {
if (bold) {
if (font.isItalic()) {
font = font.deriveFont(Font.BOLD + Font.ITALIC);
} else {
font = font.deriveFont(Font.BOLD);
}
} else {
if (font.isItalic()) {
font = font.deriveFont(Font.ITALIC);
} else {
font = font.deriveFont(Font.PLAIN);
}
}
}
@EditableProperty(name = "Font Italic")
public boolean getItalic() {
return font.isItalic();
}
public void setItalic(boolean italic) {
if (italic) {
if (font.isBold()) {
font = font.deriveFont(Font.BOLD + Font.ITALIC);
} else {
font = font.deriveFont(Font.ITALIC);
}
} else {
if (font.isBold()) {
font = font.deriveFont(Font.BOLD);
} else {
font = font.deriveFont(Font.PLAIN);
}
}
}
@EditableProperty(name = "Font Size")
public int getFontSize() {
return font.getSize();
}
public void setFontSize(int size) {
// font = font.deriveFont((float) size);
}
@Override @Override
public int getControlPointCount() { public int getControlPointCount() {
return 1; return 1;