SWT窗体字体的设置

 文章出处: http://blog.csdn.net/shrekmu/archive/2007/10/24/1842082.aspx

一、问题
    window默认的字体大小是9,RedHat Linux默认的字体大小是10。所以在Windowxia显示正常的窗体在Linuxxia会发现Lable太小。所以想设定以下字体的大小,最后发现只有当字体大小为7时才可以显示。
    Linux环境下设置了控件的字体以后就会改变控件的背景,但是控件背景的信息并没有丢失,所以需要再调一下设置背景的方法.

二、代码

    /**
     * <b>機能概要:</b> 设置指定控件以及其子控件字体的大小。<br>
     * <br>
     * <b>処理フロー:</b> <br>
     * <ul>
     * <li>设定字体
     * <li>设定子控件的字体
     * </ul>
     *
     * @param control 需要设定字体的控件
     * <p>
     */
    public void applyDialogFont(Control control) {
        // 如果控件的字体为系统的默认字体就设定控件的字体,当某些控件设定过字体后就跳过
        if (control.getFont().equals(Display.getCurrent().getSystemFont())) {
            control.setFont(getDefaultFont());
            // Linux环境下,当设置过字体后会导致之前设定的背景色无效,需要重新设置
            control.setBackground(control.getBackground());
        }
        // 设定子控件的字体
        if (control instanceof Composite) {
            Control[] children = ((Composite) control).getChildren();
            for (Control child : children) {
                applyDialogFont(child);
            }
        }
    }

    /**
     * <b>機能概要:</b> 取得本系统的默认字体。<br>
     * 需要依赖属性defaultFontHeight,可以通过Spring等IOC框架配置。<br>
     * <b>処理フロー:</b> <br>
     * <ul>
     * <li>取得本系统的默认字体
     * </ul>
     *
     * @param control 需要设定字体的控件
     * <p>
     */
    public Font getDefaultFont() {
        if (defaultFont == null) {
            // 取得系统的默认字体
            Font defFont = Display.getCurrent().getSystemFont();
            FontData[] data = defFont.getFontData();
            FontData titleData = null;
            if (data.length > 0) {
                titleData = new FontData(data[0].getName(), defaultFontHeight, data[0].getStyle());
            } else {
                titleData = new FontData("", defaultFontHeight, SWT.NONE);
            }
            // 做成默认字体
            defaultFont = new Font(DCContext.getDisplay(), titleData);
        }
        return defaultFont;
    }


三、使用方式

    public static void main(String[] args) {
        Display display = new Display ();
        Shell shell = new Shell (display);
        shell.setLayout(new FillLayout());
       
        StyledText styleText = new StyledText(shell, SWT.MULTI | SWT.READ_ONLY | SWT.CENTER);
        styleText.setText("This is a Styled Text./n You can set up different style./n");
        StyleRange styleRange1 = new StyleRange();
        styleRange1.start = 5;
        styleRange1.length = 2;
        styleRange1.underline = true;
       
        styleText.setStyleRange(styleRange1);
       
        // 设定字体,所有控件窗体完以后调用才有效
        StyleUtils.applyDialogFont(parent);
        parent.pack();
       
        shell.setSize (500, 150);
        shell.open ();
        while (!shell.isDisposed ()) {
            if (!display.readAndDispatch ()) display.sleep ();
        }
        display.dispose ();
    } 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值