Java tutorial
/******************************************************************************* * Copyright (c) 2001, 2007 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ import java.awt.*; import java.util.Locale; import javax.swing.*; import javax.swing.text.JTextComponent; import com.jgoodies.looks.FontSet; import com.jgoodies.looks.Fonts; import com.jgoodies.looks.LookUtils; import com.jgoodies.looks.plastic.PlasticLookAndFeel; import com.jgoodies.looks.plastic.PlasticXPLookAndFeel; import com.jgoodies.looks.windows.WindowsLookAndFeel; /** * An application that displays the system configuration * and font information in a JTextArea. These information * may help me understand the font setup on Chinese, Japanese, * Korean and other non-western Windows editions. * * @author Karsten Lentzsch * @version $Revision: 1.7 $ */ public final class FontTest { private JTextComponent textArea; // Launching ************************************************************** /** * Builds and the UI. */ public static void main(String[] args) { FontTest instance = new FontTest(); instance.buildInterface(); } // Building the UI ******************************************************** private void initComponents() { textArea = new JTextArea(); textArea.setText(readConfiguration()); } /** * Creates and configures a frame, builds the menu bar, builds the * content, locates the frame on the screen, and finally shows the frame. */ private void buildInterface() { initComponents(); JFrame frame = new JFrame(); frame.setContentPane(buildContentPane()); frame.setSize(400, 600); locateOnScreen(frame); frame.setTitle("JGoodies Looks :: FontTest"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } private JComponent buildContentPane() { JPanel panel = new JPanel(new BorderLayout()); panel.add(new JScrollPane(textArea), BorderLayout.CENTER); return panel; } /** * Locates the frame on the screen center. */ private void locateOnScreen(Frame frame) { Dimension paneSize = frame.getSize(); Dimension screenSize = frame.getToolkit().getScreenSize(); frame.setLocation((screenSize.width - paneSize.width) / 2, (screenSize.height - paneSize.height) / 2); } // Configuration ********************************************************** private String readConfiguration() { StringBuffer buffer = new StringBuffer(); buffer.append("Please copy the information below to your clipboard"); buffer.append("\nand send them to dev@looks.dev.java.net"); addSystemProperties(buffer, "Java environment:", new String[] { "java.vendor", "java.version", "java.runtime.version", "java.vm.version", "sun.desktop" }); addSystemProperties(buffer, "Operating System:", new String[] { "os.name", "os.version" }); if (LookUtils.IS_OS_WINDOWS) { addWindowsSettings(buffer, "Windows Settings:"); } addAWTProperties(buffer, "AWT Properties:"); addSystemProperties(buffer, "User Settings:", new String[] { "user.language", "user.country", "user.timezone" }); addDesktopProperties(buffer, "Desktop Properties:", new String[] { "win.defaultGUI.font", "win.icon.font", "win.menu.font", "win.messagebox.font", "win.ansiVar.font", "win.ansiFixed.font", "win.frame.captionFont", "win.tooltip.font" }); addInternationalizationProperties(buffer); addFontSet(buffer, "JGoodies Windows L&f:", getWindowsFontSet()); addFontSet(buffer, "JGoodies Plastic L&fs:", getPlasticFontSet()); buffer.append("\n\n"); return buffer.toString(); } private void addSystemProperties(StringBuffer buffer, String description, String[] keys) { buffer.append("\n\n"); buffer.append(description); for (int i = 0; i < keys.length; i++) { String key = keys[i]; String value = LookUtils.getSystemProperty(key, "n/a"); buffer.append("\n "); buffer.append(key); buffer.append('='); buffer.append(value); } } private void addDesktopProperties(StringBuffer buffer, String description, String[] keys) { Toolkit toolkit = Toolkit.getDefaultToolkit(); buffer.append("\n\n"); buffer.append(description); for (int i = 0; i < keys.length; i++) { String key = keys[i]; Object value = toolkit.getDesktopProperty(key); String printString; if (value == null) { printString = "n/a"; } else if (value instanceof Font) { printString = encodeFont((Font) value); } else { printString = value.toString(); } buffer.append("\n "); buffer.append(key); buffer.append('='); buffer.append(printString); } } private void addInternationalizationProperties(StringBuffer buffer) { Toolkit toolkit = Toolkit.getDefaultToolkit(); buffer.append("\n\n"); buffer.append("Internationalization:"); Font defaultGUIFont = (Font) toolkit.getDesktopProperty("win.defaultGUI.font"); Font iconFont = (Font) toolkit.getDesktopProperty("win.icon.font"); Locale locale = Locale.getDefault(); buffer.append("\n defaultLocale.getDisplayName(Locale.ENGLISH)="); buffer.append(locale.getDisplayName(Locale.ENGLISH)); buffer.append("\n defaultLocale.getDisplayLanguage(Locale.ENGLISH)="); buffer.append(locale.getDisplayLanguage(Locale.ENGLISH)); buffer.append("\n defaultLocale.getDisplayLanguage(defaultLocale)="); buffer.append(locale.getDisplayLanguage(locale)); buffer.append("\n locale has localized display language=" + localeHasLocalizedDisplayLanguage(locale)); buffer.append("\n defaultGUI font can display localized text="); buffer.append(yesNoDontKnow(Fonts.canDisplayLocalizedText(defaultGUIFont, locale))); buffer.append("\n icon font can display localized text="); buffer.append(yesNoDontKnow(Fonts.canDisplayLocalizedText(iconFont, locale))); } private static String yesNoDontKnow(Boolean b) { if (Boolean.TRUE.equals(b)) return "yes"; else if (Boolean.FALSE.equals(b)) return "no"; else return "don't know"; } private void addFontSet(StringBuffer buffer, String description, FontSet fontSet) { buffer.append("\n\n"); buffer.append(description); if (fontSet == null) { buffer.append("\n n/a"); return; } buffer.append("\n controlFont="); buffer.append(encodeFont(fontSet.getControlFont())); buffer.append("\n menuFont="); buffer.append(encodeFont(fontSet.getMenuFont())); buffer.append("\n titleFont="); buffer.append(encodeFont(fontSet.getTitleFont())); buffer.append("\n messageFont="); buffer.append(encodeFont(fontSet.getMessageFont())); buffer.append("\n smallFont="); buffer.append(encodeFont(fontSet.getSmallFont())); buffer.append("\n windowTitleFont="); buffer.append(encodeFont(fontSet.getWindowTitleFont())); } private void addWindowsSettings(StringBuffer buffer, String description) { buffer.append("\n\n"); buffer.append(description); buffer.append("\n Modern Windows="); buffer.append(LookUtils.IS_OS_WINDOWS_MODERN); buffer.append("\n Windows XP="); buffer.append(LookUtils.IS_OS_WINDOWS_XP); buffer.append("\n Windows Vista="); buffer.append(LookUtils.IS_OS_WINDOWS_VISTA); buffer.append("\n Windows L&f XP Mode="); buffer.append(LookUtils.IS_LAF_WINDOWS_XP_ENABLED); } private void addAWTProperties(StringBuffer buffer, String description) { Toolkit toolkit = Toolkit.getDefaultToolkit(); buffer.append("\n\n"); buffer.append(description); buffer.append("\n awt.toolkit="); buffer.append(toolkit.getClass().getName()); buffer.append("\n screen.size="); buffer.append(toolkit.getScreenSize().width); buffer.append(" x "); buffer.append(toolkit.getScreenSize().height); buffer.append("\n screen.resolution="); buffer.append(toolkit.getScreenResolution()); buffer.append(" "); buffer.append(LookUtils.IS_LOW_RESOLUTION ? "(low)" : "(high)"); } private String encodeFont(Font font) { StringBuffer buffer = new StringBuffer(font.getName()); buffer.append('-'); String style = font.isBold() ? (font.isItalic() ? "bolditalic" : "bold") : (font.isItalic() ? "italic" : "plain"); buffer.append(style); buffer.append('-'); buffer.append(font.getSize()); if (!font.getName().equals(font.getFamily())) { buffer.append(" family="); buffer.append(font.getFamily()); } return buffer.toString(); } private FontSet getWindowsFontSet() { try { UIManager.setLookAndFeel(new WindowsLookAndFeel()); return WindowsLookAndFeel.getFontPolicy().getFontSet("Windows", UIManager.getDefaults()); } catch (UnsupportedLookAndFeelException e) { return null; } } private FontSet getPlasticFontSet() { try { UIManager.setLookAndFeel(new PlasticXPLookAndFeel()); return PlasticLookAndFeel.getFontPolicy().getFontSet("Plastic", UIManager.getDefaults()); } catch (UnsupportedLookAndFeelException e) { return null; } } // Helper Code ************************************************************ /** * Checks and answers whether the locale's display language * is available in a localized form, for example "Deutsch" for the * German locale. * * @param locale the Locale to test * @return true if the display language is localized, false if not */ private static boolean localeHasLocalizedDisplayLanguage(Locale locale) { if (locale.getLanguage().equals(Locale.ENGLISH.getLanguage())) return true; String englishDisplayLanguage = locale.getDisplayLanguage(Locale.ENGLISH); String localizedDisplayLanguage = locale.getDisplayLanguage(locale); return !(englishDisplayLanguage.equals(localizedDisplayLanguage)); } }