drawstringdemo.java

来自「JfreeChart 常用图表例子」· Java 代码 · 共 349 行

JAVA
349
字号
/* ======================================================================== * JCommon : a free general purpose class library for the Java(tm) platform * ======================================================================== * * (C) Copyright 2000-2004, by Object Refinery Limited and Contributors. *  * Project Info:  http://www.jfree.org/jcommon/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., 59 Temple Place, Suite 330, * Boston, MA 02111-1307, USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc.  * in the United States and other countries.] *  * ------------------- * DrawStringDemo.java * ------------------- * (C) Copyright 2003, 2004, by Object Refinery Limited. * * Original Author:  David Gilbert (for Object Refinery Limited); * Contributor(s):   -; * * $Id: DrawStringDemo.java,v 1.3 2005/06/01 14:12:28 taqua Exp $ * * Changes * ------- * 10-Jun-2003 : Version 1; * */package org.jfree.demo;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTabbedPane;import org.jfree.ui.ApplicationFrame;import org.jfree.ui.FontChooserPanel;import org.jfree.ui.RefineryUtilities;import org.jfree.ui.Spinner;import org.jfree.ui.TextAnchor;/** * A demo of some of the string drawing methods in the JCommon class library. * * @author David Gilbert */public class DrawStringDemo extends ApplicationFrame                             implements ActionListener, PropertyChangeListener {    /** The alignment anchor for the first panel. */    private JComboBox combo1;    /** The alignment anchor for the second panel. */    private JComboBox combo2;    /** The rotation anchor for the second panel. */    private JComboBox combo3;    /** A spinner for the second panel. */    private Spinner spinner;    /** String panel 1. */    private DrawStringPanel drawStringPanel1;    /** String panel 2. */    private DrawStringPanel drawStringPanel2;    /**     * Creates a new demo instance.     *     * @param title  the frame title.     */    public DrawStringDemo(final String title) {        super(title);        setContentPane(createContentPane());    }    /**     * Receives action events.     *     * @param event  the event.     */    public void actionPerformed(final ActionEvent event) {        if (event.getActionCommand().equals("fontButton.clicked")) {            displayFontDialog();        }        if (event.getActionCommand().equals("combo1.changed")) {            handleCombo1Change();        }        if (event.getActionCommand().equals("combo2.changed")) {            handleCombo2Change();        }        if (event.getActionCommand().equals("combo3.changed")) {            handleCombo3Change();        }    }    /**     * Receives property change events.     *     * @param event  the event.     */    public void propertyChange(final PropertyChangeEvent event) {        final int r = this.spinner.getValue();        final double angle = Math.PI * 2.0 * (r / 360.0);        this.drawStringPanel2.setAngle(angle);        this.drawStringPanel2.invalidate();        this.drawStringPanel2.repaint();    }    /**     * Updates the display when combo 1 is updated.     */    private void handleCombo1Change() {        final String text = this.combo1.getSelectedItem().toString();        this.drawStringPanel1.setAnchor(convertStringToAnchor(text));        this.drawStringPanel1.invalidate();        this.drawStringPanel1.repaint();    }    /**     * Updates the display when combo 2 is updated.     */    private void handleCombo2Change() {        final String text = this.combo2.getSelectedItem().toString();        this.drawStringPanel2.setAnchor(convertStringToAnchor(text));        this.drawStringPanel2.invalidate();        this.drawStringPanel2.repaint();    }    /**     * Updates the display when combo 3 is updated.     */    private void handleCombo3Change() {        final String text = this.combo3.getSelectedItem().toString();        this.drawStringPanel2.setRotationAnchor(convertStringToAnchor(text));        this.drawStringPanel2.invalidate();        this.drawStringPanel2.repaint();    }    /**     * Creates the content pane for the demo frame.     *     * @return The content pane.     */    private JPanel createContentPane() {        final JPanel content = new JPanel(new BorderLayout());        final JTabbedPane tabs = new JTabbedPane();        tabs.add("Alignment", createTab1Content());        tabs.add("Rotation", createTab2Content());        content.add(tabs);        return content;    }    /**     * Creates the content for tab 1.     *     * @return The content panel.     */    private JPanel createTab1Content() {        final JPanel content = new JPanel(new BorderLayout());        this.combo1 = new JComboBox();        this.combo1.setActionCommand("combo1.changed");        populateTextAnchorCombo(this.combo1);        this.combo1.addActionListener(this);        final JPanel controls = new JPanel();        controls.add(this.combo1);        final JButton fontButton = new JButton("Select Font...");        fontButton.setActionCommand("fontButton.clicked");        fontButton.addActionListener(this);        controls.add(fontButton);        content.add(controls, BorderLayout.NORTH);        this.drawStringPanel1 = new DrawStringPanel("0123456789", false);        content.add(this.drawStringPanel1);        return content;    }    /**     * Creates the content for tab 2.     *     * @return The content panel.     */    private JPanel createTab2Content() {        final JPanel content = new JPanel(new BorderLayout());        final JPanel controls = new JPanel();        controls.add(new JLabel("Text anchor: "));        this.combo2 = new JComboBox();        populateTextAnchorCombo(this.combo2);        this.combo2.setActionCommand("combo2.changed");        this.combo2.addActionListener(this);        controls.add(this.combo2);        controls.add(new JLabel("Rotation anchor: "));        this.combo3 = new JComboBox();        populateTextAnchorCombo(this.combo3);        this.combo3.setActionCommand("combo3.changed");        this.combo3.addActionListener(this);        controls.add(this.combo3);        this.spinner = new Spinner(0);        this.spinner.addPropertyChangeListener(this);        controls.add(this.spinner);        content.add(controls, BorderLayout.NORTH);        this.drawStringPanel2 = new DrawStringPanel("Rotated Text", true);        content.add(this.drawStringPanel2);        return content;    }    /**     * Displays a primitive font chooser dialog to allow the user to change the font.     */    private void displayFontDialog() {        final FontChooserPanel panel = new FontChooserPanel(this.drawStringPanel1.getFont());        final int result = JOptionPane.showConfirmDialog(this, panel, "Font Selection",                                                   JOptionPane.OK_CANCEL_OPTION,                                                   JOptionPane.PLAIN_MESSAGE);        if (result == JOptionPane.OK_OPTION) {            this.drawStringPanel1.setFont(panel.getSelectedFont());            this.drawStringPanel2.setFont(panel.getSelectedFont());        }    }    /**     * Populates a combo box with the available {@link TextAnchor} options.     *     * @param combo  the combo box.     */    private void populateTextAnchorCombo(final JComboBox combo) {        combo.addItem("TextAnchor.TOP_LEFT");        combo.addItem("TextAnchor.TOP_CENTER");        combo.addItem("TextAnchor.TOP_RIGHT");        combo.addItem("TextAnchor.HALF_ASCENT_LEFT");        combo.addItem("TextAnchor.HALF_ASCENT_CENTER");        combo.addItem("TextAnchor.HALF_ASCENT_RIGHT");        combo.addItem("TextAnchor.CENTER_LEFT");        combo.addItem("TextAnchor.CENTER");        combo.addItem("TextAnchor.CENTER_RIGHT");        combo.addItem("TextAnchor.BASELINE_LEFT");        combo.addItem("TextAnchor.BASELINE_CENTER");        combo.addItem("TextAnchor.BASELINE_RIGHT");        combo.addItem("TextAnchor.BOTTOM_LEFT");        combo.addItem("TextAnchor.BOTTOM_CENTER");        combo.addItem("TextAnchor.BOTTOM_RIGHT");    }    /**     * Converts a string to a corresponding {@link TextAnchor} instance.     *     * @param text  the text.     *     * @return The anchor.     */    private TextAnchor convertStringToAnchor(final String text) {        if (text.equals("TextAnchor.TOP_LEFT")) {            return TextAnchor.TOP_LEFT;        }        else if (text.equals("TextAnchor.TOP_CENTER")) {            return TextAnchor.TOP_CENTER;        }        else if (text.equals("TextAnchor.TOP_RIGHT")) {            return TextAnchor.TOP_RIGHT;        }        else if (text.equals("TextAnchor.CENTER_LEFT")) {            return TextAnchor.CENTER_LEFT;        }        else if (text.equals("TextAnchor.CENTER")) {            return TextAnchor.CENTER;        }        else if (text.equals("TextAnchor.CENTER_RIGHT")) {            return TextAnchor.CENTER_RIGHT;        }        else if (text.equals("TextAnchor.HALF_ASCENT_LEFT")) {            return TextAnchor.HALF_ASCENT_LEFT;        }        else if (text.equals("TextAnchor.HALF_ASCENT_CENTER")) {            return TextAnchor.HALF_ASCENT_CENTER;        }        else if (text.equals("TextAnchor.HALF_ASCENT_RIGHT")) {            return TextAnchor.HALF_ASCENT_RIGHT;        }        else if (text.equals("TextAnchor.BASELINE_LEFT")) {            return TextAnchor.BASELINE_LEFT;        }        else if (text.equals("TextAnchor.BASELINE_CENTER")) {            return TextAnchor.BASELINE_CENTER;        }        else if (text.equals("TextAnchor.BASELINE_RIGHT")) {            return TextAnchor.BASELINE_RIGHT;        }        else if (text.equals("TextAnchor.BOTTOM_LEFT")) {            return TextAnchor.BOTTOM_LEFT;        }        else if (text.equals("TextAnchor.BOTTOM_CENTER")) {            return TextAnchor.BOTTOM_CENTER;        }        else if (text.equals("TextAnchor.BOTTOM_RIGHT")) {            return TextAnchor.BOTTOM_RIGHT;        }        else {            return null;        }     }    /**     * The starting point for the demo.     *     * @param args  ignored.     */    public static void main(final String[] args) {        final DrawStringDemo demo = new DrawStringDemo("DrawString Demo");        demo.pack();        RefineryUtilities.centerFrameOnScreen(demo);        demo.setVisible(true);    }}

⌨️ 快捷键说明

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