欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SWT/JFace的工具类

程序员文章站 2022-06-01 22:01:38
...

自己写的一个SWT/JFace的工具类,有了它,构建Label,Button,Composite,Group等等的基础组件,就变得很容易了。

 

/**
 * 布局均为GridLayout,GridData
 * 
 * @author TigerChen
 * 
 */
public class UIFactory {

    /**
     * 防止Text被撑大,而给它设置的一个默认的widthHint
     */
    public static final int SIZING_TEXT_FIELD_WIDTH = 80;

    public static Label createLabel(Composite parent, int style, String text, GridData data) {
        Label label = new Label(parent, style);
        label.setText(text);
        label.setLayoutData(data);
        return label;
    }

    public static Label createLabel(Composite parent, int style, String text, int horizontalSpan) {
        Label label = new Label(parent, style);
        label.setText(text);
        GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
        gd.horizontalSpan = horizontalSpan;
        label.setLayoutData(gd);
        return label;
    }

    public static Label createLabel(Composite parent, String text) {
        return createLabel(parent, text, 1, GridData.HORIZONTAL_ALIGN_BEGINNING);
    }

    /**
     * 创建特定字体的标签
     * 
     * @param parent
     * @param text
     * @param font 字体
     * @return
     */
    public static Label createLabel(Composite parent, String text, Font font) {
        Label label = createLabel(parent, text);
        label.setFont(font);

        return label;
    }

    public static Label createLabel(Composite parent, String text, int horizontalSpan) {
        return createLabel(parent, text, horizontalSpan, GridData.HORIZONTAL_ALIGN_BEGINNING);
    }

    /**
     * 创建特定字体的标签
     * 
     * @param parent
     * @param text
     * @param horizontalSpan
     * @param font 字体
     * @return
     */
    public static Label createLabel(Composite parent, String text, int horizontalSpan, Font font) {
        Label label = createLabel(parent, text, horizontalSpan);
        label.setFont(font);

        return label;
    }

    public static Label createLabel(Composite parent, String text, int horizontalSpan, int gridData) {
        Label label = new Label(parent, SWT.NONE);
        label.setText(text);
        GridData gd = new GridData(gridData);
        gd.horizontalSpan = horizontalSpan;
        label.setLayoutData(gd);
        return label;
    }

    public static Label createLabel(Composite parent, String text, GridData gd) {
        Label label = new Label(parent, SWT.NONE);
        label.setText(text);
        label.setLayoutData(gd);
        return label;
    }

    public static Label createLabel(Composite parent, int style, String text) {
        Label label = new Label(parent, style);
        label.setText(text);
        GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
        label.setLayoutData(gd);
        return label;
    }

    public static Label createTopLabel(Composite parent, String text) {
        Label topLabel = UIFactory.createLabel(parent, SWT.TOP, text);
        GridData desGd = (GridData) topLabel.getLayoutData();
        desGd.verticalAlignment = SWT.TOP;
        topLabel.setLayoutData(desGd);
        return topLabel;
    }

    public static Label createSeparatorLabel(Composite parent, int horizontalSpan) {
        Label sepLabel = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
        GridData data = new GridData(GridData.FILL_HORIZONTAL);
        sepLabel.setLayoutData(data);
        data.horizontalSpan = horizontalSpan;
        return sepLabel;
    }

    public static Label createSeparatorLabel(Composite parent) {
        return createSeparatorLabel(parent, 1);
    }

    public static Text createText(Composite parent, int style, GridData data) {
        Text txt = new Text(parent, style);
        txt.setLayoutData(data);
        return txt;
    }

    public static Text createText(Composite parent, int style, int horizontalSpan) {
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.widthHint = SIZING_TEXT_FIELD_WIDTH;
        gd.horizontalSpan = horizontalSpan;
        return createText(parent, style, gd);
    }

    public static Text createText(Composite parent) {
        return createText(parent, SWT.BORDER);
    }

    public static Text createText(Composite parent, int style) {
        Text text = new Text(parent, style);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.widthHint = SIZING_TEXT_FIELD_WIDTH;
        text.setLayoutData(gd);
        return text;
    }

    public static Group createGroup(Composite parent, int style, String text, int colnum, GridData data) {
        Group group = new Group(parent, style);
        group.setText(text);
        group.setLayout(new GridLayout(colnum, false));
        group.setLayoutData(data);
        return group;

    }

    public static Group createGroup(Composite parent, int sytle, String text, int colnum) {
        return createGroup(parent, sytle, text, colnum, 1);
    }

    public static Group createGroup(Composite parent, int sytle, String text, int colnum, int horizontalSpan) {
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.horizontalSpan = horizontalSpan;
        return createGroup(parent, sytle, text, colnum, gd);
    }

    public static Group createGroup(Composite parent,
                                    int sytle,
                                    String text,
                                    int colnum,
                                    int horizontalSpan,
                                    int gridData) {
        GridData gd = new GridData(gridData);
        gd.horizontalSpan = horizontalSpan;
        return createGroup(parent, sytle, text, colnum, gd);
    }

    public static Button createButton(Composite parent, int style, String text, GridData data) {
        Button btn = new Button(parent, style);
        btn.setText(text);
        btn.setLayoutData(data);
        return btn;
    }

    public static Button createButton(Composite parent, int style, String text, int horizontalSpan) {
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = horizontalSpan;
        return createButton(parent, style, text, gd);
    }

    public static Button createButton(Composite parent, String text) {
        return createButton(parent, SWT.PUSH, text);
    }

    public static Button createButton(Composite parent, String text, Image image) {
        Button button = createButton(parent, SWT.PUSH, text);
        button.setImage(image);
        return button;
    }

    public static Button createButton(Composite parent, Image image) {
        Button button = new Button(parent, SWT.PUSH);
        button.setImage(image);
        return button;
    }

    public static Button createButton(Composite parent, int style, String text) {
        Button btn = new Button(parent, style);
        btn.setText(text);
        return btn;
    }

    public static Composite createComposite(Composite parent, int style, int colnum, GridData data) {
        Composite comp = new Composite(parent, style);
        comp.setLayout(new GridLayout(colnum, false));
        comp.setLayoutData(data);
        return comp;
    }

    public static Composite createComposite(Composite parent, int style, int colnum, int horizontalSpan) {
        return createComposite(parent, style, colnum, horizontalSpan, GridData.FILL_BOTH);
    }

    public static Composite createComposite(Composite parent, int style, int colnum, int horizontalSpan, int gridData) {
        GridData gd = new GridData(gridData);
        gd.horizontalSpan = horizontalSpan;
        return createComposite(parent, style, colnum, gd);
    }

    public static Composite createComposite(Composite parent, int style, int colnum) {
        Composite comp = new Composite(parent, style);
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.horizontalSpan = 1;
        comp.setLayout(new GridLayout(colnum, false));
        comp.setLayoutData(gd);
        return comp;
    }

    public static Composite createCompositeMini(Composite parent, int style, int colnum, GridData data) {
        Composite comp = new Composite(parent, style);
        GridLayout gl = new GridLayout(colnum, false);
        gl.marginWidth = 0;
        gl.marginHeight = 0;
        comp.setLayout(gl);
        comp.setLayoutData(data);
        return comp;
    }

    public static Composite createCompositeMini(Composite parent, int style, int colnum, int horizontalSpan) {
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.horizontalSpan = horizontalSpan;
        return createCompositeMini(parent, style, colnum, gd);
    }

    public static Composite createCompositeMini(Composite parent,
                                                int style,
                                                int colnum,
                                                int horizontalSpan,
                                                int gridData) {
        GridData gd = new GridData(gridData);
        gd.horizontalSpan = horizontalSpan;
        return createCompositeMini(parent, style, colnum, gd);
    }

    public static Composite createCompositeMini(Composite parent, int style, int colnum) {
        return createCompositeMini(parent, style, colnum, 1);
    }

    public static Combo createCombo(Composite parent, int style, int horizontalSpan) {
        Combo combo = new Combo(parent, style);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = horizontalSpan;
        combo.setLayoutData(gd);
        return combo;
    }

    public static Combo createCombo(Composite parent, int style) {
        Combo combo = new Combo(parent, style);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        combo.setLayoutData(gd);
        return combo;
    }


    public static Text createBigText(Composite container, int horizontalSpan) {
        Text descTxt = UIFactory.createText(container, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL, 2);
        GridData desGd = (GridData) descTxt.getLayoutData();
        int heightHint = 5 * descTxt.getLineHeight();
        desGd = new GridData(GridData.FILL_BOTH);
        desGd.widthHint = SIZING_TEXT_FIELD_WIDTH;
        desGd.heightHint = heightHint;
        desGd.horizontalSpan = horizontalSpan;
        descTxt.setLayoutData(desGd);
        return descTxt;
    }

    /**
     * 创建指定初始宽度和高度的输入框
     * 
     * @param container 父容器
     * @param horizontalSpan 占位
     * @param width 指定的宽度
     * @param height 指定的高度
     * @return 返回输入框的引用
     */
    public static Text createBigText(Composite container, int horizontalSpan, int width, int height) {
        Text descTxt = UIFactory.createText(container, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL, 2);
        GridData desGd = (GridData) descTxt.getLayoutData();
        desGd = new GridData(GridData.FILL_BOTH);
        desGd.widthHint = width;
        desGd.heightHint = height;
        desGd.horizontalSpan = horizontalSpan;
        descTxt.setLayoutData(desGd);
        return descTxt;
    }

    /**
     * 弹出警告信息,非主线程也提供了支持。
     * 
     * @param message 警告信息内容
     */
    public static void openWarning(String message) {
        open(MessageDialog.WARNING, "Warning", message);
    }

    public static void openWarning(String title, String message) {
        open(MessageDialog.WARNING, title, message);
    }

    public static void openMessage(String title, String message) {
        open(MessageDialog.INFORMATION, title, message);
    }

    public static void openError(String title, String message) {
        open(MessageDialog.ERROR, title, message);
    }

    /**
     * 弹出信息,非主线程也提供了支持。
     * 
     * @param kind the kind of dialog to open, one of {@link #ERROR}, {@link #MessageDialog.INFORMATION}, {@link #MessageDialog.QUESTION},
     *            {@link #MessageDialog.WARNING}, {@link #MessageDialog.CONFIRM}, or {@link #MessageDialog.QUESTION_WITH_CANCEL}.
     * @param title
     * @param message
     */
    public static void open(final int kind, final String title, final String message) {
        if (message == null || "".equals(message)) {
            return;
        }

        if (Display.getCurrent() != null) {
            Display display = Display.getCurrent();
            Shell shell = display.getActiveShell();
            MessageDialog.open(kind, shell, title, message, SWT.NONE);
        } else {
            Display.getDefault().syncExec(new Runnable() {

                public void run() {
                    Display display = Display.getCurrent();
                    Shell shell = display.getActiveShell();
                    MessageDialog.open(kind, shell, title, message, SWT.NONE);
                }

            });
        }
    }

    public static ControlDecoration createDecoration(Control control, int style) {

        ControlDecoration decoration = new ControlDecoration(control, style);
        // decoration.setImage(ESBAdminImages.getImage(ESBAdminImages.IMG_LIGHT_TIP));
        decoration.hide();

        return decoration;
    }

    public static ControlDecoration createDecoration(Control control) {

        return createDecoration(control, SWT.LEFT | SWT.TOP);
    }
    
    public static Control createEmptyLine(Composite parent) {
        Label label = new Label(parent, SWT.LEFT);
        GridData gd = new GridData();
        gd.horizontalAlignment = GridData.BEGINNING;
        gd.grabExcessHorizontalSpace = false;
        gd.horizontalSpan = ((GridLayout) parent.getLayout()).numColumns;
        gd.horizontalIndent = 0;

        label.setLayoutData(gd);
        return label;
    }

}
相关标签: SWT JFace