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

📄 swtutils.java

📁 提供JFreechart图表功能, 提供JFreechart图表功能,提供JFreechart图表功能
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* =========================================================== * JFreeChart : a free chart library for the Java(tm) platform * =========================================================== * * (C) Copyright 2000-2007, by Object Refinery Limited and Contributors. * * Project Info:  http://www.jfree.org/jfreechart/index.html * * This library is free software; you can redistribute it and/or modify it  * under the terms of the GNU Lesser General Public License as published by  * the Free Software Foundation; either version 2.1 of the License, or  * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public  * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,  * USA.   * * [Java is a trademark or registered trademark of Sun Microsystems, Inc.  * in the United States and other countries.] * * ------------- * SWTUtils.java * ------------- * (C) Copyright 2006, 2007, by Henry Proudhon and Contributors. * * Original Author:  Henry Proudhon (henry.proudhon AT ensmp.fr); * Contributor(s):   Rainer Blessing; *                   David Gilbert (david.gilbert@object-refinery.com); *                   Christoph Beck. * * Changes * ------- * 01-Aug-2006 : New class (HP); * 16-Jan-2007 : Use FontData.getHeight() instead of direct field access (RB);  * 31-Jan-2007 : Moved the dummy JPanel from SWTGraphics2D.java,  *               added a new convert method for mouse events (HP); * 12-Jul-2007 : Improved the mouse event conversion with buttons  *               and modifiers handling, patch sent by Christoph Beck (HP); * 27-Aug-2007 : Modified toAwtMouseEvent signature (HP). *  */package org.jfree.experimental.swt;import java.awt.event.InputEvent;import java.awt.event.MouseEvent;import java.awt.geom.Point2D;import java.awt.geom.Rectangle2D;import javax.swing.JPanel;import org.eclipse.swt.SWT;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.graphics.Device;import org.eclipse.swt.graphics.Font;import org.eclipse.swt.graphics.FontData;import org.eclipse.swt.graphics.GC;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.graphics.Rectangle;/** * Utility class gathering some useful and general method. * Mainly convert forth and back graphical stuff between  * awt and swt. */public class SWTUtils {        private final static String Az = "ABCpqr";    /** A dummy JPanel used to provide font metrics. */    protected static final JPanel DUMMY_PANEL = new JPanel();    /**     * Create a <code>FontData</code> object which encapsulate      * the essential data to create a swt font. The data is taken      * from the provided awt Font.     * <p>Generally speaking, given a font size, the returned swt font      * will display differently on the screen than the awt one.     * Because the SWT toolkit use native graphical resources whenever      * it is possible, this fact is platform dependent. To address      * this issue, it is possible to enforce the method to return      * a font with the same size (or at least as close as possible)      * as the awt one.     * <p>When the object is no more used, the user must explicitly      * call the dispose method on the returned font to free the      * operating system resources (the garbage collector won't do it).     *      * @param device The swt device to draw on (display or gc device).     * @param font The awt font from which to get the data.     * @param ensureSameSize A boolean used to enforce the same size      * (in pixels) between the awt font and the newly created swt font.     * @return a <code>FontData</code> object.     */    public static FontData toSwtFontData(Device device, java.awt.Font font,             boolean ensureSameSize) {        FontData fontData = new FontData();        fontData.setName(font.getFamily());        int style = SWT.NORMAL;        switch (font.getStyle()) {            case java.awt.Font.PLAIN:                style |= SWT.NORMAL;                break;            case java.awt.Font.BOLD:                style |= SWT.BOLD;                break;            case java.awt.Font.ITALIC:                style |= SWT.ITALIC;                break;            case (java.awt.Font.ITALIC + java.awt.Font.BOLD):                style |= SWT.ITALIC | SWT.BOLD;                break;        }        fontData.setStyle(style);        // convert the font size (in pt for awt) to height in pixels for swt        int height = (int) Math.round(font.getSize() * 72.0                 / device.getDPI().y);        fontData.setHeight(height);        // hack to ensure the newly created swt fonts will be rendered with the        // same height as the awt one        if (ensureSameSize) {                        GC tmpGC = new GC(device);            Font tmpFont = new Font(device, fontData);            tmpGC.setFont(tmpFont);            if (tmpGC.textExtent(Az).x                     > DUMMY_PANEL.getFontMetrics(font).stringWidth(Az)) {                while (tmpGC.textExtent(Az).x                         > DUMMY_PANEL.getFontMetrics(font).stringWidth(Az)) {                    tmpFont.dispose();                    height--;                    fontData.setHeight(height);                    tmpFont = new Font(device, fontData);                    tmpGC.setFont(tmpFont);                }            }            else if (tmpGC.textExtent(Az).x                     < DUMMY_PANEL.getFontMetrics(font).stringWidth(Az)) {                while (tmpGC.textExtent(Az).x                         < DUMMY_PANEL.getFontMetrics(font).stringWidth(Az)) {                    tmpFont.dispose();                    height++;                    fontData.setHeight(height);                    tmpFont = new Font(device, fontData);                    tmpGC.setFont(tmpFont);                }            }            tmpFont.dispose();            tmpGC.dispose();        }        return fontData;    }        /**     * Create an awt font by converting as much information      * as possible from the provided swt <code>FontData</code>.     * <p>Generally speaking, given a font size, an swt font will      * display differently on the screen than the corresponding awt      * one. Because the SWT toolkit use native graphical ressources whenever      * it is possible, this fact is platform dependent. To address      * this issue, it is possible to enforce the method to return      * an awt font with the same height as the swt one.     *      * @param device The swt device being drawn on (display or gc device).     * @param fontData The swt font to convert.     * @param ensureSameSize A boolean used to enforce the same size      * (in pixels) between the swt font and the newly created awt font.     * @return An awt font converted from the provided swt font.     */    public static java.awt.Font toAwtFont(Device device, FontData fontData,             boolean ensureSameSize) {        int style;        switch (fontData.getStyle()) {            case SWT.NORMAL:                style = java.awt.Font.PLAIN;                break;            case SWT.ITALIC:                style = java.awt.Font.ITALIC;                break;            case SWT.BOLD:                style = java.awt.Font.BOLD;                break;            default:                style = java.awt.Font.PLAIN;                break;        }        int height = (int) Math.round(fontData.getHeight() * device.getDPI().y                 / 72.0);        // hack to ensure the newly created awt fonts will be rendered with the        // same height as the swt one        if (ensureSameSize) {            GC tmpGC = new GC(device);            Font tmpFont = new Font(device, fontData);

⌨️ 快捷键说明

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