yutaoaijingjing132
2011-09-01 13:19
浏览 253
已采纳

JComboBox 读取本地字体库,如何把中文排在前边?

GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();

String evnfonts[] = gEnv.getAvailableFontFamilyNames();

if(evnfonts!=null && evnfonts.length>0){
fontBox = new JComboBox(evnfonts);
}

但是 读取出来的中文在后边 ,所以加进去就在后边,我如何把中文排在前边?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

10条回答 默认 最新

  • freishlove 2011-09-01 17:31
    已采纳
    已采纳该答案
    打赏 评论
  • AngelAndAngel 2011-09-01 13:22

    能详细说一下么

    打赏 评论
  • AngelAndAngel 2011-09-01 13:30

    哦 这玩意没办法排序啊,这个是因为abcd排序 然后才排序别的编码的吧,除非你和qq一样,全部都是自己手动编排的

    打赏 评论
  • freishlove 2011-09-01 13:37

    很简单

    [code="java"]List tmp = Arrays.asList(evnfonts);

        Collections.reverse(tmp);
        evnfonts= tmp.toArray(new String[]{});
        fontBox = new JComboBox(evnfonts); [/code]
    
    打赏 评论
  • freishlove 2011-09-01 13:39

    [code="java"]public class GetSystemFont extends JFrame {

    private JComboBox box;
    private String fontNames[];
    private JLabel tipLabel;
    
    public GetSystemFont() {
        super("获取系统字体");
        Container container = getContentPane();
        tipLabel = new JLabel("系统字体有:");
        container.add(tipLabel);
    
        GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();// GraphicsEnvironment是一个抽象类,不能实例化,只能用其中的静态方法获取一个实例
        fontNames = environment.getAvailableFontFamilyNames();// 获取系统字体
    
        java.util.List<String> tmp = Arrays.asList(fontNames);
        Collections.reverse(tmp);
        fontNames = tmp.toArray(new String[]{});
        box = new JComboBox(fontNames);
    
        // 为box注册ItemListener监听器
        box.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent event) {
                if (event.getStateChange() == event.SELECTED) {
                    int style = tipLabel.getFont().getStyle(); // 获取当前字体的类型
                    int size = tipLabel.getFont().getSize();// 获取当前字体的大小
                    tipLabel.setFont(new Font(fontNames[box.getSelectedIndex()],
                            style, size));// 改变tipLabel的字体,但不改变大小和类型
                }
            }
        });
    
        container.setLayout(new FlowLayout());
        container.add(box);
    
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        pack();
        setResizable(false);
    
        // 使窗口屏幕居中
        Toolkit kit = Toolkit.getDefaultToolkit();// 抽象类,通过静态方法获取实例
        Dimension frameSize = new Dimension(), screenSize = kit.getScreenSize(); // 获取屏幕的大小
        getSize(frameSize); // 获取窗口大小
        setLocation((screenSize.width - frameSize.width) / 2,
                (screenSize.height - frameSize.height) / 2);
    }
    
    public static void main(String[] args) {
        new GetSystemFont();
    }
    

    }[/code]

    打赏 评论
  • freishlove 2011-09-01 16:28

    [quote]还有一个问题请教,我在area输入的时候会出现一个输入框,怎么去掉呢,具体看图![/quote]

    swing写的东西貌似都有这个,很多软件都有,betbeans也有吧,不知道是不是去不掉

    记得结贴啊

    打赏 评论
  • freishlove 2011-09-01 17:05

    输入框的问题试试在程序中加入这句(未必管用的):
    System.setProperty("java.awt.im.style","on-the-spot");

    打赏 评论
  • freishlove 2011-09-01 17:12

    [quote]问题补充:
    freish 写道
    输入框的问题试试在程序中加入这句(未必管用的):
    System.setProperty("java.awt.im.style","on-the-spot");

    不行 不管用啊[/quote]

    我在jdk1.6的JTextArea中是有效果的,本来的框变成虚线了

    打赏 评论
  • freishlove 2011-09-01 17:21

    那个虚线是没法去掉的了,我看很多swing做的软件都有,如dbvisualizer

    打赏 评论
  • freishlove 2011-09-01 17:31
    打赏 评论

相关推荐 更多相似问题