我写的代码如下,通过获得本地字体来设置画布上的字。但是获得的字体名称英文字体是正常的,中文字体的名称全是一个个方块,这是怎么回事,改如何解决呢?package javaapplication3;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;/**
*
* @author Administrator
*/
public class ShowFonts implements ItemListener { JFrame f;
MyCanvas mc;
Choice ch;
String fontName[]; public static void main(String argv[])
{
new ShowFonts();
}
public ShowFonts()
{
f = new JFrame("test");
fontName = GraphicsEnvironment.getLocalGraphicsEnvironment().
getAvailableFontFamilyNames();
ch = new Choice();
ch.addItemListener(this);
for(int i=0;i<fontName.length;i++)
ch.addItem(fontName[i]); mc = new MyCanvas(fontName[0]);
f.add(ch,BorderLayout.NORTH);
f.add(mc,BorderLayout.CENTER);
f.pack();
f.setVisible(true);
} public void itemStateChanged(ItemEvent e){
mc.setFontName(ch.getSelectedItem());
mc.repaint();
} class MyCanvas extends Canvas
{
String fontName; public MyCanvas(String name)
{
fontName = name;
setSize(480,272); } public void setFontName(String name)
{
fontName = name;
}
public void paint(Graphics g)
{
g.setFont(new Font(fontName,Font.PLAIN,36));
g.drawString("ABC", 50, 50);
}
}}
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;/**
*
* @author Administrator
*/
public class ShowFonts implements ItemListener { JFrame f;
MyCanvas mc;
Choice ch;
String fontName[]; public static void main(String argv[])
{
new ShowFonts();
}
public ShowFonts()
{
f = new JFrame("test");
fontName = GraphicsEnvironment.getLocalGraphicsEnvironment().
getAvailableFontFamilyNames();
ch = new Choice();
ch.addItemListener(this);
for(int i=0;i<fontName.length;i++)
ch.addItem(fontName[i]); mc = new MyCanvas(fontName[0]);
f.add(ch,BorderLayout.NORTH);
f.add(mc,BorderLayout.CENTER);
f.pack();
f.setVisible(true);
} public void itemStateChanged(ItemEvent e){
mc.setFontName(ch.getSelectedItem());
mc.repaint();
} class MyCanvas extends Canvas
{
String fontName; public MyCanvas(String name)
{
fontName = name;
setSize(480,272); } public void setFontName(String name)
{
fontName = name;
}
public void paint(Graphics g)
{
g.setFont(new Font(fontName,Font.PLAIN,36));
g.drawString("ABC", 50, 50);
}
}}
2、编译问题,试试转换其它编译,什么GB2312,UTF-8,看哪种显示正确就用哪种