Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18402
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-20 14:39
文章分类
文章存档

2015年(1)

2014年(1)

2013年(1)

我的朋友

分类: Java

2015-08-28 16:42:53

   这个问题网上已有很多答案,有些还给出了终极的程序来说明,但大都没有将这个问题的几个方面连接起来。因此,写出此文章,想补充其不足,希望能对初学者有一定帮助。
1. java的界面开发一般都是用awt, swing来实现

示例代码(ButtonExample.java):
import javax.swing.*;
public class ButtonExample extends JPanel {
    JFrame myframe;
    ButtonExample() {
        myframe=new JFrame("欢迎进入Java世界");
        myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myframe.add(this);        
        JButton ok= new JButton("确定");
        add(ok);
        myframe.setSize(300, 150);
        myframe.setResizable(false);
        myframe.setVisible(true);
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ButtonExample myButton = new ButtonExample();
    }
}

运行此程序后,中文没有正确显示,如下:

注: 主窗口标题显示正确,但内容中文显示不正常(按钮的中文显示为方框)

2. 上述问题是开发所用的JDK没有正确支持中文字体的原因,网上有一种方法是从windows端拷贝字体,其实目前主流的linux系统都自带有中文字体,可以运行下列程序验证(CheckFonts.java):
import java.awt.*;
import java.io.*;
import java.awt.event.*;

public class CheckFonts {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        java.awt.GraphicsEnvironment eq = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
          String[] fontNames = eq.getAvailableFontFamilyNames();
          for(int i=0;i<fontNames.length;i++){
          System.out.println(fontNames[i]);
          }
    }
}

输出示例如下:

文泉驿微米黑
文泉驿正黑
文泉驿点阵正黑
文泉驿等宽微米黑
文泉驿等宽正黑

3. 因此,最初示例程序中通过UIManager类添加字体设置代码,验证通过
(ButtonExample.java)
import java.awt.Color;
import java.awt.Font;
import javax.swing.*;
public class ButtonExample extends JPanel {
    JFrame myframe;
    ButtonExample() {
        myframe = new JFrame("欢迎进入Java世界");
        myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myframe.add(this);
        JButton ok = new JButton("确定");
        add(ok);
        myframe.setSize(300, 150);
        myframe.setResizable(false);
        myframe.setVisible(true);
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Font f = new Font("文泉驿正黑", Font.PLAIN, 12);
        UIManager.put("Label.font", f);
        UIManager.put("Label.foreground", Color.black);
        UIManager.put("Button.font", f);
        UIManager.put("Menu.font", f);
        UIManager.put("MenuItem.font", f);
        UIManager.put("List.font", f);
        UIManager.put("CheckBox.font", f);
        UIManager.put("RadioButton.font", f);
        UIManager.put("ComboBox.font", f);
        UIManager.put("TextArea.font", f);
        UIManager.put("EditorPane.font", f);
        UIManager.put("ScrollPane.font", f);
        UIManager.put("ToolTip.font", f);
        UIManager.put("TextField.font", f);
        UIManager.put("TableHeader.font", f);
        UIManager.put("Table.font", f);
        ButtonExample myButton = new ButtonExample();
    }
}

4. 此示例基于debian wheezy/Eclipse Platform3.8.0验证,其他平台及环境请自行验证。引用网页如下:
/> />

阅读(1063) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~