⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fontfieldeditor.java

📁 jfa2ce 源码帮助开发人员更好的理解运用
💻 JAVA
字号:
/******************************************************************************* * Copyright (c) 2000, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: *     IBM Corporation - initial API and implementation *******************************************************************************/package org.eclipse.jface.preference;import org.eclipse.jface.dialogs.IDialogConstants;import org.eclipse.jface.resource.JFaceResources;import org.eclipse.jface.resource.StringConverter;import org.eclipse.jface.util.Assert;import org.eclipse.swt.SWT;import org.eclipse.swt.events.DisposeEvent;import org.eclipse.swt.events.DisposeListener;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.graphics.Font;import org.eclipse.swt.graphics.FontData;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.widgets.Button;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Control;import org.eclipse.swt.widgets.FontDialog;import org.eclipse.swt.widgets.Label;import org.eclipse.swt.widgets.Text;/** * A field editor for a font type preference. */public class FontFieldEditor extends FieldEditor {    /**     * The change font button, or <code>null</code> if none     * (before creation and after disposal).     */    private Button changeFontButton = null;    /**     * The text for the change font button, or <code>null</code>     * if missing.     */    private String changeButtonText;    /**     * The text for the preview, or <code>null</code> if no preview is desired     */    private String previewText;    /**     * Font data for the chosen font button, or <code>null</code> if none.     */    private FontData[] chosenFont;    /**     * The label that displays the selected font, or <code>null</code> if none.     */    private Label valueControl;    /**     * The previewer, or <code>null</code> if none.     */    private DefaultPreviewer previewer;    /**     * Internal font previewer implementation.     */    private static class DefaultPreviewer {        private Text text;        private String string;        private Font font;        /**         * Constructor for the previewer.         * @param s         * @param parent         */        public DefaultPreviewer(String s, Composite parent) {            string = s;            text = new Text(parent, SWT.READ_ONLY | SWT.BORDER);            text.addDisposeListener(new DisposeListener() {                public void widgetDisposed(DisposeEvent e) {                    if (font != null) {						font.dispose();					}                }            });            if (string != null) {				text.setText(string);			}        }        /**         * @return the control the previewer is using         */        public Control getControl() {            return text;        }        /**         * Set the font to display with         * @param fontData         */        public void setFont(FontData[] fontData) {            if (font != null) {				font.dispose();			}            font = new Font(text.getDisplay(), fontData);            text.setFont(font);        }        /**         * @return the preferred size of the previewer.         */        public int getPreferredExtent() {            return 40;        }    }    /**     * Creates a new font field editor      */    protected FontFieldEditor() {    }    /**     * Creates a font field editor with an optional preview area.     *      * @param name the name of the preference this field editor works on     * @param labelText the label text of the field editor     * @param previewAreaText the text used for the preview window. If it is     * <code>null</code> there will be no preview area,     * @param parent the parent of the field editor's control     */    public FontFieldEditor(String name, String labelText,            String previewAreaText, Composite parent) {        init(name, labelText);        previewText = previewAreaText;        changeButtonText = JFaceResources.getString("openChange"); //$NON-NLS-1$        createControl(parent);    }    /**     * Creates a font field editor without a preview.     *      * @param name the name of the preference this field editor works on     * @param labelText the label text of the field editor     * @param parent the parent of the field editor's control     */    public FontFieldEditor(String name, String labelText, Composite parent) {        this(name, labelText, null, parent);    }    /* (non-Javadoc)     * Method declared on FieldEditor.     */    protected void adjustForNumColumns(int numColumns) {        GridData data = new GridData();        if (valueControl.getLayoutData() != null) {			data = (GridData) valueControl.getLayoutData();		}        data.horizontalSpan = numColumns - getNumberOfControls() + 1;        valueControl.setLayoutData(data);    }    /* (non-Javadoc)     * Method declared on FieldEditor.     */    protected void applyFont() {        if (chosenFont != null && previewer != null) {			previewer.setFont(chosenFont);		}    }    /* (non-Javadoc)     * Method declared on FieldEditor.     */    protected void doFillIntoGrid(Composite parent, int numColumns) {        getLabelControl(parent);        valueControl = getValueControl(parent);        GridData gd = new GridData(GridData.FILL_HORIZONTAL                | GridData.GRAB_HORIZONTAL);        gd.horizontalSpan = numColumns - getNumberOfControls() + 1;        valueControl.setLayoutData(gd);        if (previewText != null) {            previewer = new DefaultPreviewer(previewText, parent);            gd = new GridData(GridData.FILL_HORIZONTAL);            gd.heightHint = previewer.getPreferredExtent();            gd.widthHint = previewer.getPreferredExtent();            previewer.getControl().setLayoutData(gd);        }        changeFontButton = getChangeControl(parent);        gd = new GridData();        int widthHint = convertHorizontalDLUsToPixels(changeFontButton,                IDialogConstants.BUTTON_WIDTH);        gd.widthHint = Math.max(widthHint, changeFontButton.computeSize(                SWT.DEFAULT, SWT.DEFAULT, true).x);        changeFontButton.setLayoutData(gd);    }    /* (non-Javadoc)     * Method declared on FieldEditor.     */    protected void doLoad() {        if (changeFontButton == null) {			return;		}        updateFont(PreferenceConverter.getFontDataArray(getPreferenceStore(),                getPreferenceName()));    }    /* (non-Javadoc)     * Method declared on FieldEditor.     */    protected void doLoadDefault() {        if (changeFontButton == null) {			return;		}        updateFont(PreferenceConverter.getDefaultFontDataArray(                getPreferenceStore(), getPreferenceName()));    }    /* (non-Javadoc)     * Method declared on FieldEditor.     */    protected void doStore() {        if (chosenFont != null) {			PreferenceConverter.setValue(getPreferenceStore(),                    getPreferenceName(), chosenFont);		}    }    /**     * Returns the change button for this field editor.     *     * @param parent The Composite to create the button in if required.     * @return the change button     */    protected Button getChangeControl(Composite parent) {        if (changeFontButton == null) {            changeFontButton = new Button(parent, SWT.PUSH);            if (changeButtonText != null) {				changeFontButton.setText(changeButtonText);			}            changeFontButton.addSelectionListener(new SelectionAdapter() {                public void widgetSelected(SelectionEvent event) {                    FontDialog fontDialog = new FontDialog(changeFontButton                            .getShell());                    if (chosenFont != null) {						fontDialog.setFontList(chosenFont);					}                    FontData font = fontDialog.open();                    if (font != null) {                        FontData[] oldFont = chosenFont;                        if (oldFont == null) {							oldFont = JFaceResources.getDefaultFont()                                    .getFontData();						}                        setPresentsDefaultValue(false);                        FontData[] newData = new FontData[1];                        newData[0] = font;                        updateFont(newData);                        fireValueChanged(VALUE, oldFont[0], font);                    }                }            });            changeFontButton.addDisposeListener(new DisposeListener() {                public void widgetDisposed(DisposeEvent event) {                    changeFontButton = null;                }            });            changeFontButton.setFont(parent.getFont());            setButtonLayoutData(changeFontButton);        } else {            checkParent(changeFontButton, parent);        }        return changeFontButton;    }    /* (non-Javadoc)     * Method declared on FieldEditor.     */    public int getNumberOfControls() {        if (previewer == null) {			return 3;		}                return 4;    }    /**     * Returns the preferred preview height.      *     * @return the height, or <code>-1</code> if no previewer     *  is installed     */    public int getPreferredPreviewHeight() {        if (previewer == null) {			return -1;		}        return previewer.getPreferredExtent();    }    /**     * Returns the preview control for this field editor.     *     * @return the preview control     */    public Control getPreviewControl() {        if (previewer == null) {			return null;		}        return previewer.getControl();    }    /**     * Returns the value control for this field editor. The value control     * displays the currently selected font name.     * @param parent The Composite to create the viewer in if required     * @return the value control     */    protected Label getValueControl(Composite parent) {        if (valueControl == null) {            valueControl = new Label(parent, SWT.LEFT);            valueControl.setFont(parent.getFont());            valueControl.addDisposeListener(new DisposeListener() {                public void widgetDisposed(DisposeEvent event) {                    valueControl = null;                }            });        } else {            checkParent(valueControl, parent);        }        return valueControl;    }    /**     * Sets the text of the change button.     *     * @param text the new text     */    public void setChangeButtonText(String text) {        Assert.isNotNull(text);        changeButtonText = text;        if (changeFontButton != null) {			changeFontButton.setText(text);		}    }    /**     * Updates the change font button and the previewer to reflect the     * newly selected font.     * @param font The FontData[] to update with.     */    private void updateFont(FontData font[]) {        FontData[] bestFont = JFaceResources.getFontRegistry().filterData(                font, valueControl.getDisplay());        //if we have nothing valid do as best we can        if (bestFont == null) {			bestFont = getDefaultFontData();		}        //Now cache this value in the receiver        this.chosenFont = bestFont;        if (valueControl != null) {            valueControl.setText(StringConverter.asString(chosenFont[0]));        }        if (previewer != null) {            previewer.setFont(bestFont);        }    }    /**     * Store the default preference for the field     * being edited     */    protected void setToDefault() {        FontData[] defaultFontData = PreferenceConverter                .getDefaultFontDataArray(getPreferenceStore(),                        getPreferenceName());        PreferenceConverter.setValue(getPreferenceStore(), getPreferenceName(),                defaultFontData);    }    /**     * Get the system default font data.     * @return FontData[]     */    private FontData[] getDefaultFontData() {        return valueControl.getDisplay().getSystemFont().getFontData();    }    /*     * @see FieldEditor.setEnabled(boolean,Composite).     */    public void setEnabled(boolean enabled, Composite parent) {        super.setEnabled(enabled, parent);        getChangeControl(parent).setEnabled(enabled);        getValueControl(parent).setEnabled(enabled);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -