小部件是否可以从其前任继承属性? 例如,假设我有以下代码段:
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设置任何属性,除了背景)
甚至可能吗?
答案 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简要概述了您可以用它做些什么。