📄 aboutframe.java
字号:
package org.joone.edit;import java.awt.*;import java.awt.event.*;import java.lang.reflect.*;import java.util.*;import javax.swing.*;import org.joone.log.*;import org.joone.net.NeuralNet;import CH.ifa.draw.util.Iconkit;import CH.ifa.draw.framework.HJDError;/** * This class creates an About box centered on the coordinates provided. * * @author Harry Glasgow */public class AboutFrame extends JDialog{ private static final ILogger log = LoggerFactory.getLogger (AboutFrame.class); /** * The array of lines of text to display. * Do not use '\n' new lines in the text as the auto-sizing will not cope. */ private static final String [] ABOUT_TEXT = { "Joone - Java Object Oriented Neural Engine", "http://www.joone.org", "pmarrone@users.sourceforge.net" }; /** * The array of lines of developers to display. * Do not use '\n' new lines in the text as the auto-sizing will not cope. */ private static final String [] HALL_OF_FAME = { "Joone was developed by Paolo Marrone,", "with the valuable collaboration of:", " Gavin Alford, Mark Allen, Jan Boonen, Yan Cheng Cheok,", " Ka-Hing Cheung, Andrea Corti, Huascar Fiorletta, Firestrand,", " Pascal Deschenes, Jan Erik Garshol, Harry Glasgow,", " Jack Hawkins, Nathan Hindley, Olivier Hussenet,", " Boris Jansen, Shen Linlin, Casey Marshall, Julien Norman,", " Christian Ribeaud, Anat Rozenzon, Trevis Silvers,", " Paul Sinclair, Thomas Lionel Smets, Jerry R.Vos" }; /** * The array of lines of external packages to display. * Do not use '\n' new lines in the text as the auto-sizing will not cope. */ private static final String [] EXTERNAL_PACK = { "Joone uses the following external packages:", " JHotDraw - http://sourceforge.net/projects/jhotdraw", " BeanShell - http://www.beanshell.org", " Groovy - http://groovy.codehaus.org", " jEdit-Syntax - http://sourceforge.net/projects/jedit-syntax", " Log4j - http://jakarta.apache.org/log4j", " HSSF-POI - http://jakarta.apache.org/poi", " L2FProd - http://common.l2fprod.com", " NachoCalendar - http://nachocalendar.sourceforge.net", " XStream - http://xstream.codehaus.org", " VisAD - http://www.ssec.wisc.edu/~billh/visad.html", }; /** * Constructor * * @param x the x-coordinate to center the frame on. * @param y the y-coordinate to center the frame on. */ AboutFrame(Frame owner) { setModal(true); JRootPane rp = new JRootPane(); setRootPane(rp); rp.setLayout(new BorderLayout()); Iconkit kit = Iconkit.instance(); if (kit == null) throw new HJDError("Iconkit instance isn't set"); final Image img = kit.loadImageResource(JoonEdit.DIAGRAM_IMAGES + "jooneShadowSmall.gif"); /*java.net.URL url = getClass().getResource(JoonEdit.DIAGRAM_IMAGES + "jooneShadowSmall.gif"); if (url != null) { final Image img = Toolkit.getDefaultToolkit().getImage(url.getFile());*/ if (img != null) { Panel q = new Panel() {public void paint(Graphics g) {g.drawImage(img, 0, 0, this);} public Dimension getPreferredSize() {return new Dimension(84, 87);}}; rp.add(q, BorderLayout.WEST); } //} Button b = new Button(" OK "); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); } }); Panel p = new Panel(); p.add(b); rp.add(p, BorderLayout.SOUTH); TextBlock tb = new TextBlock(ABOUT_TEXT, HALL_OF_FAME, EXTERNAL_PACK); rp.add(tb, BorderLayout.CENTER); setTitle("About Joone"); setBackground(Color.white); setResizable(false); pack(); } /** * Places the AboutFrame in the center of the owner frame. */ public void place(int x, int y) { setLocation(x - getWidth()/2, y - getHeight()/2); } /** * Inner class to render the multi line block of text. */ class TextBlock extends Canvas { /** Padding around the text area. */ private static final int TEXT_PADDING = 5; /** The set of text lines to display */ private String [] lines; /** * Constructor. Inserts in the Editor and Engine Version line. * * @param linesArg the text to display. * @param hallOfFameArg the list of developers to display. */ public TextBlock(String [] linesArg, String[] hallOfFameArg, String[] extPack) { // Get the NeuralNet version by Reflection so that this does not fall over in a // steaming heap for old NeuralNet versions that don't have the getVersion method. String neuralNetVersion = "unknown"; Integer neuralNetNumericVersion = null; try { Object o = new NeuralNet(); Method m = o.getClass().getMethod("getVersion", new Class[0]); if (m != null) { neuralNetVersion = (String)m.invoke(o, new Object[0]); } m = o.getClass().getMethod("getNumericVersion", new Class[0]); if (m != null) { neuralNetNumericVersion = (Integer)m.invoke(o, new Object[0]); } } catch (IllegalAccessException iae) { log.warn ( "IllegalAccessException getting NeuralNetwork version. Message is " + iae.getMessage(), iae ); } catch (InvocationTargetException ite) { log.warn ( "InvocationTargetException getting NeuralNetwork version. Message is : " + ite.getMessage(), ite ); } catch (NoSuchMethodException nsme) { log.warn ( "NoSuchMethodException getting NeuralNetwork version. Do not panic. Message is : " + nsme.getMessage(), nsme ); } // Add the box text. Collection col = new ArrayList(); for (int i = 0; i < linesArg.length; i++) { col.add(linesArg[i]); } // Add the version lines. col.add(""); col.add("Editor version: " + JoonEdit.getVersion()); col.add("Engine version: " + neuralNetVersion); if (neuralNetNumericVersion == null || neuralNetNumericVersion.intValue() < JoonEdit.getNumericRecommendedEngineVersion()) { col.add("Engine version " + JoonEdit.getRecommendedEngineVersion() + " or above recommended"); } // Add the developers names. col.add(""); for (int i = 0; i < hallOfFameArg.length; i++) { col.add(hallOfFameArg[i]); } // Add the developers names. col.add(""); for (int i = 0; i < extPack.length; i++) { col.add(extPack[i]); } // Convert to String array. lines = new String [col.size()]; Iterator iter = col.iterator(); int i = 0; while (iter.hasNext()) { lines[i++] = (String)iter.next(); } } /** * Paint method is overriden to draw the text. * * @param g the graphics object to do the painting. */ public void paint(Graphics g){ FontMetrics fm = getFontMetrics(getFont()); int lineAscent = fm.getAscent(); int lineHeight = fm.getHeight(); for (int i = 0; i < lines.length; i++) { g.drawString(lines[i], TEXT_PADDING, i * lineHeight + lineAscent + TEXT_PADDING); } } /** * Method to return the preferred size, * so that pack will automatically compress the fame. * * @return the prefered size of the canvas. */ public Dimension getPreferredSize() { FontMetrics fm = getFontMetrics(getFont()); int lineHeight = fm.getHeight(); // Find the length of the longest line. int width = 0; for (int i = 0; i < lines.length; i++) { if (fm.stringWidth(lines[i]) > width) { width = fm.stringWidth(lines[i]); } } return new Dimension( width + 2 * TEXT_PADDING, lines.length * lineHeight + 2 * TEXT_PADDING); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -