除了swing似乎附带的5个基本字体外,我还在尝试更改GUI的字体。如何导入字体并在我的代码中实际使用它们?
发布于 2012-05-03 00:46:51
默认情况下,可用的数量通常超过5个,但不同的系统会有所不同。这个答案既检查了现有的字体,也检查了如何加载和注册新字体。
它使用Download Free Fonts提供的“Airacobra Condensed”字体(通过热链接网址获得)。应用程序Jar中的字体。也可以通过URL访问。

import java.awt.*;
import javax.swing.*;
import java.net.URL;
class LoadFont {
public static void main(String[] args) throws Exception {
// This font is < 35Kb.
URL fontUrl = new URL("http://www.webpagepublicity.com/" +
"free-fonts/a/Airacobra%20Condensed.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream());
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(font);
JList fonts = new JList( ge.getAvailableFontFamilyNames() );
JOptionPane.showMessageDialog(null, new JScrollPane(fonts));
}
}好吧,这很有趣,但是这个字体到底是什么样子的呢?

import java.awt.*;
import javax.swing.*;
import java.net.URL;
class DisplayFont {
public static void main(String[] args) throws Exception {
URL fontUrl = new URL("http://www.webpagepublicity.com/" +
"free-fonts/a/Airacobra%20Condensed.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream());
font = font.deriveFont(Font.PLAIN,20);
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(font);
JLabel l = new JLabel(
"The quick brown fox jumped over the lazy dog. 0123456789");
l.setFont(font);
JOptionPane.showMessageDialog(null, l);
}
}发布于 2012-05-03 00:39:03
你可以尝试这样做:
Font font = Font.createFont(Font.TRUETYPE_FONT, fontStream);接下来,
GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(font);和,
new Font("nameOfFont", Font.BOLD, 13)发布于 2012-09-27 23:54:14
这是一种加载打包在jar文件+ xml文件中的字体的方法,以读取字体大小、字体名称和字体文件名
1) FontLibrary类:
package be.nicholas.font.loading;
import java.awt.Font;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import be.nicholas.font.CustomFont;
import be.nicholas.utils.Logger;
import be.nicholas.utils.Misc;
public class FontLibrary {
public static Map<String, Font> fonts = null;
private static Logger logger = Logger.getInstance();
public FontLibrary() { }
/**
* Get the font by it's name.
* @param fontname the font name
* @return The font for the given id if it exists.
*/
public static Font getFont(String fontname)
{
Font f = FontLibrary.fonts.get(fontname);
if(f == null)
logger.error("Font ("+fontname+") could not be found.");
return f;
}
/**
* Get the font by it's name and change the fontsize
* @param fontname the font name.
* @param fontsize
* @return Font
*/
public static Font getFont(String fontname, int fontsize)
{
Font f = FontLibrary.fonts.get(fontname).deriveFont((float) fontsize);
if(f == null)
logger.error("Font ("+fontname+") could not be found.");
return f;
}
public static void load()
{
try
{
InputStream fontStream = FontLibrary.class.getResourceAsStream("/data/fonts/fonts.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fontStream);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("font");
fonts = new HashMap<String, Font>();
logger.error("Starting to load fonts...");
for (int temp = 0; temp < nList.getLength(); temp++)
{
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE)
{
Element fontElement = (Element) nNode;
CustomFont f = new CustomFont();
f.setName(getTagValue("name", fontElement));
f.setFont(CustomFont.load(getTagValue("filename", fontElement), Integer.parseInt(getTagValue("fontsize", fontElement))));
f.setSize(Integer.parseInt(getTagValue("fontsize", fontElement)));
fonts.put(f.getName(), f.getFont());
/**
* Calculate percentage
*/
int percent = Misc.getPercentage(fonts.size(), nList.getLength());
String msg = percent+"% of fonts loaded("+fonts.size()+" of "+nList.getLength()+")";
}
}
} catch (Exception e) {
logger.error("Error: "+e);
}
logger.error("All fonts loaded!"+"("+fonts.size()+" fonts int total).");
//logger.info(fonts.size()+" = size of fontsmap. -> name ofzo: "+fonts.get("rssmall"));
}
private static String getTagValue(String sTag, Element eElement)
{
NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
Node nValue = (Node) nlList.item(0);
return nValue.getNodeValue();
}
}2) CustomFont类:
package be.nicholas.font;
import java.awt.Font;
import java.io.InputStream;
import be.nicholas.font.loading.FontLibrary;
import be.nicholas.utils.Misc;
public class CustomFont {
public String name;
public Font fontObject;
public int size;
public CustomFont() {
//super(font);
}
public void setFont(Font fontObject)
{
this.fontObject = fontObject;
}
public Font getFont()
{
return this.fontObject;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
public void setSize(int size)
{
this.size = size;
}
public int getSize()
{
return this.size;
}
public static Font load(String filename,int fontSize)
{
InputStream fontStream = CustomFont.class.getResourceAsStream("/be/nicholas/fonts/"+filename);
if (fontStream != null)
{
try
{
Font labelFont;
labelFont = Font.createFont(Font.TRUETYPE_FONT, fontStream);
labelFont = labelFont.deriveFont((float) fontSize);
return labelFont;
} catch (Exception e)
{
System.out.println("error " + e);
}
}
return null;
}
}3) XML结构:
<fonts>
<font>
<name>mycustomfontname</name>
<filename>myfont.ttf</filename>
<fontsize>16</fontsize>
</font>
<font>
<name>champagne</name>
<filename>ChampagneAndLimousines.ttf</filename>
<fontsize>50</fontsize>
</font>
</fonts>4)加载字体:
JLabel label = new JLabel('testText');
//load it with the default given font size
label.setFont(FontLibrary.fonts.get("mycustomfontname"));
//load a font with a custom font size:
label.setFont(FontLibrary.fonts.get("mycustomfontname").deriveFont(22));我希望这能有所帮助:)..。我是一个真正的java新手,我在我使用java的第五天做了这个,所以它远不是完美的,但它可以做好工作
https://stackoverflow.com/questions/10417907
复制相似问题