1. 程式人生 > >SWT窗體字型的設定

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 ();
    }