|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
package com.sun.beans.editors; |
|
|
|
import java.awt.*; |
|
import java.beans.*; |
|
|
|
public class FontEditor extends Panel implements java.beans.PropertyEditor { |
|
private static final long serialVersionUID = 6732704486002715933L; |
|
|
|
public FontEditor() { |
|
setLayout(null); |
|
|
|
toolkit = Toolkit.getDefaultToolkit(); |
|
fonts = toolkit.getFontList(); |
|
|
|
familyChoser = new Choice(); |
|
for (int i = 0; i < fonts.length; i++) { |
|
familyChoser.addItem(fonts[i]); |
|
} |
|
add(familyChoser); |
|
familyChoser.reshape(20, 5, 100, 30); |
|
|
|
styleChoser = new Choice(); |
|
for (int i = 0; i < styleNames.length; i++) { |
|
styleChoser.addItem(styleNames[i]); |
|
} |
|
add(styleChoser); |
|
styleChoser.reshape(145, 5, 70, 30); |
|
|
|
sizeChoser = new Choice(); |
|
for (int i = 0; i < pointSizes.length; i++) { |
|
sizeChoser.addItem("" + pointSizes[i]); |
|
} |
|
add(sizeChoser); |
|
sizeChoser.reshape(220, 5, 70, 30); |
|
|
|
resize(300,40); |
|
} |
|
|
|
|
|
public Dimension preferredSize() { |
|
return new Dimension(300, 40); |
|
} |
|
|
|
public void setValue(Object o) { |
|
font = (Font) o; |
|
if (this.font == null) |
|
return; |
|
|
|
changeFont(font); |
|
|
|
for (int i = 0; i < fonts.length; i++) { |
|
if (fonts[i].equals(font.getFamily())) { |
|
familyChoser.select(i); |
|
break; |
|
} |
|
} |
|
for (int i = 0; i < styleNames.length; i++) { |
|
if (font.getStyle() == styles[i]) { |
|
styleChoser.select(i); |
|
break; |
|
} |
|
} |
|
for (int i = 0; i < pointSizes.length; i++) { |
|
if (font.getSize() <= pointSizes[i]) { |
|
sizeChoser.select(i); |
|
break; |
|
} |
|
} |
|
} |
|
|
|
private void changeFont(Font f) { |
|
font = f; |
|
if (sample != null) { |
|
remove(sample); |
|
} |
|
sample = new Label(sampleText); |
|
sample.setFont(font); |
|
add(sample); |
|
Component p = getParent(); |
|
if (p != null) { |
|
p.invalidate(); |
|
p.layout(); |
|
} |
|
invalidate(); |
|
layout(); |
|
repaint(); |
|
support.firePropertyChange("", null, null); |
|
} |
|
|
|
public Object getValue() { |
|
return (font); |
|
} |
|
|
|
public String getJavaInitializationString() { |
|
if (this.font == null) |
|
return "null"; |
|
|
|
return "new java.awt.Font(\"" + font.getName() + "\", " + |
|
font.getStyle() + ", " + font.getSize() + ")"; |
|
} |
|
|
|
public boolean action(Event e, Object arg) { |
|
String family = familyChoser.getSelectedItem(); |
|
int style = styles[styleChoser.getSelectedIndex()]; |
|
int size = pointSizes[sizeChoser.getSelectedIndex()]; |
|
try { |
|
Font f = new Font(family, style, size); |
|
changeFont(f); |
|
} catch (Exception ex) { |
|
System.err.println("Couldn't create font " + family + "-" + |
|
styleNames[style] + "-" + size); |
|
} |
|
return (false); |
|
} |
|
|
|
|
|
public boolean isPaintable() { |
|
return true; |
|
} |
|
|
|
public void paintValue(java.awt.Graphics gfx, java.awt.Rectangle box) { |
|
|
|
Font oldFont = gfx.getFont(); |
|
gfx.setFont(font); |
|
FontMetrics fm = gfx.getFontMetrics(); |
|
int vpad = (box.height - fm.getAscent())/2; |
|
gfx.drawString(sampleText, 0, box.height-vpad); |
|
gfx.setFont(oldFont); |
|
} |
|
|
|
public String getAsText() { |
|
if (this.font == null) { |
|
return null; |
|
} |
|
StringBuilder sb = new StringBuilder(); |
|
sb.append(this.font.getName()); |
|
sb.append(' '); |
|
|
|
boolean b = this.font.isBold(); |
|
if (b) { |
|
sb.append("BOLD"); |
|
} |
|
boolean i = this.font.isItalic(); |
|
if (i) { |
|
sb.append("ITALIC"); |
|
} |
|
if (b || i) { |
|
sb.append(' '); |
|
} |
|
sb.append(this.font.getSize()); |
|
return sb.toString(); |
|
} |
|
|
|
public void setAsText(String text) throws IllegalArgumentException { |
|
setValue((text == null) ? null : Font.decode(text)); |
|
} |
|
|
|
public String[] getTags() { |
|
return null; |
|
} |
|
|
|
public java.awt.Component getCustomEditor() { |
|
return this; |
|
} |
|
|
|
public boolean supportsCustomEditor() { |
|
return true; |
|
} |
|
|
|
public void addPropertyChangeListener(PropertyChangeListener l) { |
|
support.addPropertyChangeListener(l); |
|
} |
|
|
|
public void removePropertyChangeListener(PropertyChangeListener l) { |
|
support.removePropertyChangeListener(l); |
|
} |
|
|
|
private Font font; |
|
private Toolkit toolkit; |
|
private String sampleText = "Abcde..."; |
|
|
|
private Label sample; |
|
private Choice familyChoser; |
|
private Choice styleChoser; |
|
private Choice sizeChoser; |
|
|
|
private String fonts[]; |
|
private String[] styleNames = { "plain", "bold", "italic" }; |
|
private int[] styles = { Font.PLAIN, Font.BOLD, Font.ITALIC }; |
|
private int[] pointSizes = { 3, 5, 8, 10, 12, 14, 18, 24, 36, 48 }; |
|
|
|
private PropertyChangeSupport support = new PropertyChangeSupport(this); |
|
|
|
} |