< prev index next >
modules/graphics/src/main/java/javafx/scene/text/Font.java
Print this page
*** 397,406 ****
--- 397,459 ----
* @param urlStr from which to load the font, specified as a String.
* @param size of the returned font.
* @return the Font, or null if the font cannot be created.
*/
public static Font loadFont(String urlStr, double size) {
+ Font[] fonts = loadFontInternal(urlStr, size, false);
+ return (fonts == null) ? null : fonts[0];
+ }
+
+ /**
+ * Loads font resources from the specified URL. If the load is successful
+ * such that the location is readable, and it represents a supported
+ * font format then an array of<code>Font</code> object will be returned.
+ * <p>
+ * The use case for this method is for loading all fonts
+ * from a TrueType Collection (TTC).
+ * <p>
+ * If a security manager is present, the application
+ * must have both permission to read from the specified URL location
+ * and the {@link javafx.util.FXPermission} "loadFont".
+ * If the application does not have permission to read from the specified
+ * URL location, then null is returned.
+ * If the application does not have the "loadFont" permission then this method
+ * will return an array of one element which is the default
+ * system font with the specified font size.
+ * <p>
+ * Any failure such as a malformed URL being unable to locate or read
+ * from the resource, or if it doesn't represent a font, will result in
+ * a <code>null</code> return. It is the application's responsibility
+ * to check this before use.
+ * <p>
+ * On a successful (non-null) return the fonts will be registered
+ * with the FX graphics system for creation by available constructors
+ * and factory methods, and the application should use it in this
+ * manner rather than calling this method again, which would
+ * repeat the overhead of downloading and installing the fonts.
+ * <p>
+ * The font <code>size</code> parameter is a convenience so that in
+ * typical usage the application can directly use the returned (non-null)
+ * font rather than needing to create one via a constructor. Invalid sizes
+ * are those <=0 and will result in a default size.
+ * <p>
+ * If the URL represents a local disk file, then no copying is performed
+ * and the font file is required to persist for the lifetime of the
+ * application. Updating the file in any manner will result
+ * in unspecified and likely undesired behaviours.
+ *
+ * @param urlStr from which to load the fonts, specified as a String.
+ * @param size of the returned fonts.
+ * @return array of Font, or null if the fonts cannot be created.
+ * @since 9
+ */
+ public static Font[] loadFonts(String urlStr, double size) {
+ return loadFontInternal(urlStr, size, true);
+ }
+
+ private static Font[] loadFontInternal(String urlStr, double size,
+ boolean loadAll) {
URL url = null;
try {
url = new URL(urlStr); // null string arg. is caught here.
} catch (Exception e) {
return null;
*** 424,461 ****
sm.checkPermission(filePermission);
}
} catch (Exception e) {
return null;
}
! return Toolkit.getToolkit().getFontLoader().loadFont(path, size);
}
! Font font = null;
URLConnection connection = null;
InputStream in = null;
try {
connection = url.openConnection();
in = connection.getInputStream();
! font = Toolkit.getToolkit().getFontLoader().loadFont(in, size);
} catch (Exception e) {
return null;
} finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e) {
}
}
! return font;
}
/**
* Loads a font resource from the specified input stream.
* If the load is successful such that the stream can be
* fully read, and it represents a supported font format then a
* <code>Font</code> object will be returned.
* <p>
* If a security manager is present, the application
* must have the {@link javafx.util.FXPermission} "loadFont".
* If the application does not have permission then this method
* will return the default system font with the specified font size.
* <p>
--- 477,560 ----
sm.checkPermission(filePermission);
}
} catch (Exception e) {
return null;
}
! return
! Toolkit.getToolkit().getFontLoader().loadFont(path, size, loadAll);
}
! Font[] fonts = null;
URLConnection connection = null;
InputStream in = null;
try {
connection = url.openConnection();
in = connection.getInputStream();
! fonts =
! Toolkit.getToolkit().getFontLoader().loadFont(in, size, loadAll);
} catch (Exception e) {
return null;
} finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e) {
}
}
! return fonts;
}
/**
* Loads a font resource from the specified input stream.
* If the load is successful such that the stream can be
* fully read, and it represents a supported font format then a
* <code>Font</code> object will be returned.
* <p>
+ * The use case for this method is for loading all fonts
+ * from a TrueType Collection (TTC).
+ * <p>
+ * If a security manager is present, the application
+ * must have the {@link javafx.util.FXPermission} "loadFont".
+ * If the application does not have permission then this method
+ * will return the default system font with the specified font size.
+ * <p>
+ * Any failure such as abbreviated input, or an unsupported font format
+ * will result in a <code>null</code> return. It is the application's
+ * responsibility to check this before use.
+ * <p>
+ * On a successful (non-null) return the fonts will be registered
+ * with the FX graphics system for creation by available constructors
+ * and factory methods, and the application should use it in this
+ * manner rather than calling this method again, which would
+ * repeat the overhead of re-reading and installing the font.
+ * <p>
+ * The font <code>size</code> parameter is a convenience so that in
+ * typical usage the application can directly use the returned (non-null)
+ * fonts rather than needing to create one via a constructor. Invalid sizes
+ * are those <=0 and will result in a default size.
+ * <p>
+ * This method does not close the input stream.
+ * @param in stream from which to load the font.
+ * @param size of the returned font.
+ * @return array of Font, or null if the fonts cannot be created.
+ * @since 9
+ */
+ public static Font loadFont(InputStream in, double size) {
+ if (size <= 0) {
+ size = getDefaultSystemFontSize();
+ }
+ Font[] fonts =
+ Toolkit.getToolkit().getFontLoader().loadFont(in, size, false);
+ return (fonts == null) ? null : fonts[0];
+ }
+
+ /**
+ * Loads font resources from the specified input stream.
+ * If the load is successful such that the stream can be
+ * fully read, and it represents a supported font format then a
+ * an array of <code>Font</code> object will be returned.
+ * <p>
* If a security manager is present, the application
* must have the {@link javafx.util.FXPermission} "loadFont".
* If the application does not have permission then this method
* will return the default system font with the specified font size.
* <p>
*** 477,491 ****
* This method does not close the input stream.
* @param in stream from which to load the font.
* @param size of the returned font.
* @return the Font, or null if the font cannot be created.
*/
! public static Font loadFont(InputStream in, double size) {
if (size <= 0) {
size = getDefaultSystemFontSize();
}
! return Toolkit.getToolkit().getFontLoader().loadFont(in, size);
}
/**
* Converts this {@code Font} object to a {@code String} representation.
* The String representation is for informational use only and will change.
--- 576,592 ----
* This method does not close the input stream.
* @param in stream from which to load the font.
* @param size of the returned font.
* @return the Font, or null if the font cannot be created.
*/
! public static Font[] loadFonts(InputStream in, double size) {
if (size <= 0) {
size = getDefaultSystemFontSize();
}
! Font[] fonts =
! Toolkit.getToolkit().getFontLoader().loadFont(in, size, true);
! return (fonts == null) ? null : fonts;
}
/**
* Converts this {@code Font} object to a {@code String} representation.
* The String representation is for informational use only and will change.
< prev index next >