在Java SWT中继承窗口小部件属性

时间:2014-02-17 15:10:20

标签: java swt eclipse-rcp eclipse-plugin

小部件是否可以从其前任继承属性? 例如,假设我有以下代码段:

Display display=new Display();
Shell shell=new Shell(display, SWT.DIALOG_TRIM);
Image menu_background=new Image(display, "menu.jpg");
shell.setBackgroundImage(menu_background);
shell.setBounds(menu_background.getBounds());
shell.setBackgroundMode(SWT.INHERIT_DEFAULT);


Group game_modes=new Group(shell,SWT.SHADOW_ETCHED_OUT);
game_modes.setText("Game Mode");
game_modes.setLocation(50, 170);
game_modes.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
... 
...
...

shell.setBackgroundMode(SWT.INHERIT_DEFAULT)的调用确保组窗口小部件具有与其前任相同的背景(它是否称为前任?我不熟悉确切的术语) - shell。

但是,如何将shell属性强加于组对象呢?例如:与shell相同的TextStyle,或与shell相同的Font。 (是的,我知道我没有在上面的代码中为shell设置任何属性,除了背景)

甚至可能吗?

1 个答案:

答案 0 :(得分:3)

使用Eclipse 4.x,您可以使用CSS为应用程序设置样式,从那里将相同的属性应用于控件(Vogella's tutorial)。看起来它也应该可以使用3.x(http://www.slideshare.net/toedter_k/css-styling-for-eclipse-rcp-3x-and-4x)。

默认使用Eclipse 3.x时,我会说你不能强制复合的所有子元素都具有相同的属性,作为父元素,你只能继承背景。

在这种情况下,为了始终具有相同的属性,您可能希望创建自己的框架,该框架将生成自定义样式的窗口小部件,这将根据需要创建和设置UI控件,例如:

    public class WidgetFactory {

    public static final Color BACKGROUND_DEFAULT = new Color(Display.getCurrent(), 224, 231, 255);

public static final String FONT_DEFAULT = "default";

    private static FontRegistry fontRegistry = null;

    static {
    fontRegistry = new FontRegistry(Display.getCurrent());

            putFont(FONT_DEFAULT, "Verdana", fontSizes.get(FONT_DEFAULT), SWT.NONE);
    }

    public static Composite createComposite(Composite parent, int numCols, boolean equalWidth, int gridDataStyle) {
            Composite composite = new Composite(parent, SWT.NONE);
            composite.setFont(fontRegistry.get(FONT_DEFAULT));
            composite.setBackground(BACKGROUND_DEFAULT);

            GridData gridData = new GridData(gridDataStyle);
            composite.setLayoutData(gridData);

            GridLayout layout = new GridLayout(numCols, equalWidth);
            layout.marginWidth = 0;
            layout.marginHeight = 0;
            layout.horizontalSpacing = 0;
            layout.verticalSpacing = 0;
            composite.setLayout(layout);

            return composite;
        }

        public static Label createLabel(Composite parent, String text, String toolTipText) {
            Label theLabel = new Label(parent, SWT.NONE);
            theLabel.setText(trim(text));
            theLabel.setToolTipText(trim(toolTipText));
            theLabel.setFont(fontRegistry.get(FONT_DEFAULT));
            parent.setBackgroundMode(SWT.INHERIT_DEFAULT);
            return theLabel;
        }
    }

还有一些其他样式选项,presentationFactory extension point可能,您认为这超出了您的问题范围。 Here简要概述了您可以用它做些什么。