All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.invation.code.toval.graphic.component.FontComboBox Maven / Gradle / Ivy

package de.invation.code.toval.graphic.component;

import java.awt.Component;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.util.Arrays;
import java.util.Comparator;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

import de.invation.code.toval.validate.Validate;

public class FontComboBox extends JComboBox {
	
	private static final long serialVersionUID = -2088962747490626507L;

	public FontComboBox(DisplayMode displayMode){
		super();
		Validate.notNull(displayMode);
		GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
		if(displayMode == DisplayMode.FONT_NAME){
			Font[] availableFonts = e.getAllFonts();
			Arrays.sort(availableFonts, new LexicalFontComparator());
			setModel(new DefaultComboBoxModel(availableFonts));
		} else {
			setModel(new DefaultComboBoxModel(FontFamilyEnum.values()));
		}
	    setRenderer(new FontComboBoxCellRenderer(displayMode));
	}
	
	public FontComboBox(DisplayMode displayMode, String initialValue){
		this(displayMode);
		if(displayMode == DisplayMode.FONT_NAME){
			Font initialFont = Font.getFont(initialValue);
			setSelectedItem(initialFont);
		} else {
			setSelectedItem(initialValue);
		}
	}
	
	private class FontComboBoxCellRenderer extends JLabel implements ListCellRenderer {
		
		private static final long serialVersionUID = -8102511925600836012L;
		
		private DisplayMode displayMode = null;

		public FontComboBoxCellRenderer(DisplayMode displayMode){
			this.displayMode = displayMode;
			setOpaque(true);
	        setHorizontalAlignment(LEFT);
	        setVerticalAlignment(CENTER);
		}

		@Override
		public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
			if(displayMode == DisplayMode.FONT_NAME){
				setText(((Font) value).getFontName());
			} else {
				setText(value.toString());
			}
			return this;
		}
		
	}
	
	public enum DisplayMode {
		FONT_NAME, FONT_FAMILY;
	}
	
	private enum FontFamilyEnum {
		Dialog, DialogInput, Monospaced, SansSerif, Serif;
	}
	
	private class LexicalFontComparator implements Comparator {
		@Override
		public int compare(Font o1, Font o2) {
			return o1.getFontName().compareTo(o2.getFontName());
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy