src/demo/share/jfc/J2Ddemo/java2d/demos/Fonts/AllFonts.java
changeset 50146 0bb0e464ee76
child 52252 de9486d74a74
equal deleted inserted replaced
50145:752645a158ff 50146:0bb0e464ee76
       
     1 /*
       
     2  *
       
     3  * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
       
     4  *
       
     5  * Redistribution and use in source and binary forms, with or without
       
     6  * modification, are permitted provided that the following conditions
       
     7  * are met:
       
     8  *
       
     9  *   - Redistributions of source code must retain the above copyright
       
    10  *     notice, this list of conditions and the following disclaimer.
       
    11  *
       
    12  *   - Redistributions in binary form must reproduce the above copyright
       
    13  *     notice, this list of conditions and the following disclaimer in the
       
    14  *     documentation and/or other materials provided with the distribution.
       
    15  *
       
    16  *   - Neither the name of Oracle nor the names of its
       
    17  *     contributors may be used to endorse or promote products derived
       
    18  *     from this software without specific prior written permission.
       
    19  *
       
    20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
       
    21  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
       
    22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       
    23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
       
    24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
       
    25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
       
    26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
       
    27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
       
    28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
       
    29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
       
    30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    31  */
       
    32 package java2d.demos.Fonts;
       
    33 
       
    34 
       
    35 import static java.awt.Color.BLACK;
       
    36 import static java.awt.Color.GRAY;
       
    37 import static java.awt.Color.WHITE;
       
    38 import java.awt.Component;
       
    39 import java.awt.Dimension;
       
    40 import java.awt.Font;
       
    41 import java.awt.FontMetrics;
       
    42 import java.awt.Graphics2D;
       
    43 import java.awt.GraphicsEnvironment;
       
    44 import java.awt.event.ActionEvent;
       
    45 import java.awt.event.ActionListener;
       
    46 import java.util.ArrayList;
       
    47 import java.util.List;
       
    48 import java2d.AnimatingControlsSurface;
       
    49 import java2d.CustomControls;
       
    50 import javax.swing.JMenu;
       
    51 import javax.swing.JMenuBar;
       
    52 import javax.swing.JMenuItem;
       
    53 import javax.swing.JSlider;
       
    54 import javax.swing.SwingConstants;
       
    55 import javax.swing.border.EtchedBorder;
       
    56 import javax.swing.event.ChangeEvent;
       
    57 import javax.swing.event.ChangeListener;
       
    58 
       
    59 
       
    60 /**
       
    61  * Scrolling text of fonts returned from GraphicsEnvironment.getAllFonts().
       
    62  */
       
    63 @SuppressWarnings("serial")
       
    64 public class AllFonts extends AnimatingControlsSurface {
       
    65 
       
    66     private static final List<Font> fonts = new ArrayList<Font>();
       
    67 
       
    68     static {
       
    69         GraphicsEnvironment ge =
       
    70                 GraphicsEnvironment.getLocalGraphicsEnvironment();
       
    71         for (Font font : ge.getAllFonts()) {
       
    72             if (font.canDisplayUpTo(font.getName()) != 0) {
       
    73                 fonts.add(font);
       
    74             }
       
    75         }
       
    76     }
       
    77     private int nStrs;
       
    78     private int strH;
       
    79     private int fi;
       
    80     protected int fsize = 14;
       
    81     protected List<Font> v = new ArrayList<Font>();
       
    82 
       
    83     public AllFonts() {
       
    84         setBackground(WHITE);
       
    85         setSleepAmount(500);
       
    86         setControls(new Component[] { new DemoControls(this) });
       
    87     }
       
    88 
       
    89     public void handleThread(int state) {
       
    90     }
       
    91 
       
    92     @Override
       
    93     public void reset(int w, int h) {
       
    94         v.clear();
       
    95         Font f = fonts.get(0).deriveFont(Font.PLAIN, fsize);
       
    96         FontMetrics fm = getFontMetrics(f);
       
    97         strH = (fm.getAscent() + fm.getDescent());
       
    98         nStrs = h / strH + 1;
       
    99         fi = 0;
       
   100     }
       
   101 
       
   102     @Override
       
   103     public void step(int w, int h) {
       
   104         if (fi < fonts.size()) {
       
   105             v.add(fonts.get(fi).deriveFont(Font.PLAIN, fsize));
       
   106         }
       
   107         if (v.size() == nStrs && !v.isEmpty() || fi > fonts.size()) {
       
   108             v.remove(0);
       
   109         }
       
   110         fi = v.isEmpty() ? 0 : ++fi;
       
   111     }
       
   112 
       
   113     @Override
       
   114     public void render(int w, int h, Graphics2D g2) {
       
   115 
       
   116         g2.setColor(BLACK);
       
   117 
       
   118         int yy = (fi >= fonts.size()) ? 0 : h - v.size() * strH - strH / 2;
       
   119 
       
   120         for (int i = 0; i < v.size(); i++) {
       
   121             Font f = v.get(i);
       
   122             int sw = getFontMetrics(f).stringWidth(f.getName());
       
   123             g2.setFont(f);
       
   124             g2.drawString(f.getName(), (w / 2 - sw / 2), yy += strH);
       
   125         }
       
   126     }
       
   127 
       
   128     public static void main(String argv[]) {
       
   129         createDemoFrame(new AllFonts());
       
   130     }
       
   131 
       
   132 
       
   133     static class DemoControls extends CustomControls implements ActionListener,
       
   134             ChangeListener {
       
   135 
       
   136         AllFonts demo;
       
   137         JSlider slider;
       
   138         int fsize[] = { 8, 14, 18, 24 };
       
   139         JMenuItem menuitem[] = new JMenuItem[fsize.length];
       
   140         Font font[] = new Font[fsize.length];
       
   141 
       
   142         @SuppressWarnings("LeakingThisInConstructor")
       
   143         public DemoControls(AllFonts demo) {
       
   144             this.demo = demo;
       
   145             setBackground(GRAY);
       
   146 
       
   147             int sleepAmount = (int) demo.getSleepAmount();
       
   148             slider = new JSlider(SwingConstants.HORIZONTAL, 0, 999, sleepAmount);
       
   149             slider.setBorder(new EtchedBorder());
       
   150             slider.setPreferredSize(new Dimension(90, 22));
       
   151             slider.addChangeListener(this);
       
   152             add(slider);
       
   153             JMenuBar menubar = new JMenuBar();
       
   154             add(menubar);
       
   155             JMenu menu = menubar.add(new JMenu("Font Size"));
       
   156             for (int i = 0; i < fsize.length; i++) {
       
   157                 font[i] = new Font(Font.SERIF, Font.PLAIN, fsize[i]);
       
   158                 menuitem[i] = menu.add(new JMenuItem(String.valueOf(fsize[i])));
       
   159                 menuitem[i].setFont(font[i]);
       
   160                 menuitem[i].addActionListener(this);
       
   161             }
       
   162         }
       
   163 
       
   164         @Override
       
   165         public void actionPerformed(ActionEvent e) {
       
   166             for (int i = 0; i < fsize.length; i++) {
       
   167                 if (e.getSource().equals(menuitem[i])) {
       
   168                     demo.fsize = fsize[i];
       
   169                     Dimension d = demo.getSize();
       
   170                     demo.reset(d.width, d.height);
       
   171                     break;
       
   172                 }
       
   173             }
       
   174         }
       
   175 
       
   176         @Override
       
   177         public void stateChanged(ChangeEvent e) {
       
   178             demo.setSleepAmount(slider.getValue());
       
   179         }
       
   180     }
       
   181 }