Path: blob/master/src/demo/share/jfc/J2Ddemo/java2d/demos/Fonts/AllFonts.java
41175 views
/*1*2* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.3*4* Redistribution and use in source and binary forms, with or without5* modification, are permitted provided that the following conditions6* are met:7*8* - Redistributions of source code must retain the above copyright9* notice, this list of conditions and the following disclaimer.10*11* - Redistributions in binary form must reproduce the above copyright12* notice, this list of conditions and the following disclaimer in the13* documentation and/or other materials provided with the distribution.14*15* - Neither the name of Oracle nor the names of its16* contributors may be used to endorse or promote products derived17* from this software without specific prior written permission.18*19* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS20* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,21* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR22* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR23* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,24* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,25* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR26* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF27* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING28* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS29* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.30*/31package java2d.demos.Fonts;323334import static java.awt.Color.BLACK;35import static java.awt.Color.GRAY;36import static java.awt.Color.WHITE;37import java.awt.Component;38import java.awt.Dimension;39import java.awt.Font;40import java.awt.FontMetrics;41import java.awt.Graphics2D;42import java.awt.GraphicsEnvironment;43import java.awt.event.ActionEvent;44import java.awt.event.ActionListener;45import java.util.ArrayList;46import java.util.List;47import java2d.AnimatingControlsSurface;48import java2d.CustomControls;49import javax.swing.JMenu;50import javax.swing.JMenuBar;51import javax.swing.JMenuItem;52import javax.swing.JSlider;53import javax.swing.SwingConstants;54import javax.swing.border.EtchedBorder;55import javax.swing.event.ChangeEvent;56import javax.swing.event.ChangeListener;575859/**60* Scrolling text of fonts returned from GraphicsEnvironment.getAllFonts().61*/62@SuppressWarnings("serial")63public class AllFonts extends AnimatingControlsSurface {6465private static final List<Font> fonts = new ArrayList<Font>();6667static {68GraphicsEnvironment ge =69GraphicsEnvironment.getLocalGraphicsEnvironment();70for (Font font : ge.getAllFonts()) {71if (font.canDisplayUpTo(font.getName()) != 0) {72fonts.add(font);73}74}75}76private int nStrs;77private int strH;78private int fi;79protected int fsize = 14;80protected List<Font> v = new ArrayList<Font>();8182public AllFonts() {83setBackground(WHITE);84setSleepAmount(500);85setControls(new Component[] { new DemoControls(this) });86}8788public void handleThread(int state) {89}9091@Override92public void reset(int w, int h) {93v.clear();94Font f = fonts.get(0).deriveFont(Font.PLAIN, fsize);95FontMetrics fm = getFontMetrics(f);96strH = (fm.getAscent() + fm.getDescent());97nStrs = h / strH + 1;98fi = 0;99}100101@Override102public void step(int w, int h) {103if (fi < fonts.size()) {104v.add(fonts.get(fi).deriveFont(Font.PLAIN, fsize));105}106if (v.size() == nStrs && !v.isEmpty() || fi > fonts.size()) {107v.remove(0);108}109fi = v.isEmpty() ? 0 : ++fi;110}111112@Override113public void render(int w, int h, Graphics2D g2) {114115g2.setColor(BLACK);116117int yy = (fi >= fonts.size()) ? 0 : h - v.size() * strH - strH / 2;118119for (int i = 0; i < v.size(); i++) {120Font f = v.get(i);121int sw = getFontMetrics(f).stringWidth(f.getName());122g2.setFont(f);123g2.drawString(f.getName(), (w / 2 - sw / 2), yy += strH);124}125}126127public static void main(String[] argv) {128createDemoFrame(new AllFonts());129}130131132static class DemoControls extends CustomControls implements ActionListener,133ChangeListener {134135AllFonts demo;136JSlider slider;137int[] fsize = { 8, 14, 18, 24 };138JMenuItem[] menuitem = new JMenuItem[fsize.length];139Font[] font = new Font[fsize.length];140141@SuppressWarnings("LeakingThisInConstructor")142public DemoControls(AllFonts demo) {143this.demo = demo;144setBackground(GRAY);145146int sleepAmount = (int) demo.getSleepAmount();147slider = new JSlider(SwingConstants.HORIZONTAL, 0, 999, sleepAmount);148slider.setBorder(new EtchedBorder());149slider.setPreferredSize(new Dimension(90, 22));150slider.addChangeListener(this);151add(slider);152JMenuBar menubar = new JMenuBar();153add(menubar);154JMenu menu = menubar.add(new JMenu("Font Size"));155for (int i = 0; i < fsize.length; i++) {156font[i] = new Font(Font.SERIF, Font.PLAIN, fsize[i]);157menuitem[i] = menu.add(new JMenuItem(String.valueOf(fsize[i])));158menuitem[i].setFont(font[i]);159menuitem[i].addActionListener(this);160}161}162163@Override164public void actionPerformed(ActionEvent e) {165for (int i = 0; i < fsize.length; i++) {166if (e.getSource().equals(menuitem[i])) {167demo.fsize = fsize[i];168Dimension d = demo.getSize();169demo.reset(d.width, d.height);170break;171}172}173}174175@Override176public void stateChanged(ChangeEvent e) {177demo.setSleepAmount(slider.getValue());178}179}180}181182183